ďťż
 
zapytanie do =?ISO-8859-2?Q?dw=F3ch_tabel_z_limitem_wier?==?ISO-8859-2?Q?szy?= ďťż
 
zapytanie do =?ISO-8859-2?Q?dw=F3ch_tabel_z_limitem_wier?==?ISO-8859-2?Q?szy?=
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

zapytanie do =?ISO-8859-2?Q?dw=F3ch_tabel_z_limitem_wier?==?ISO-8859-2?Q?szy?=



nn3dx - 26-04-2006 01:21
zapytanie do =?ISO-8859-2?Q?dw=F3ch_tabel_z_limitem_wier?==?ISO-8859-2?Q?szy?=
  witam

mam taką zagwozdke, rzecz dotyczy wyświetlania produktów
założenia: są dwie tabele w bazie mysql (w uproszczeniu, może być więcej
ale to już nieważne dla przykładu)
-pierwsza - produkty (id, nazwa)
-druga - rozmiary (id, pid, nazwa)

i chciałbym wyświetlić 10 produktów zaczynając od produktu x wraz z ich
rozmiarami
obecnie robie to przez kolejne zapytanie do każdego produktu:

foreach (SELECT * FROM produkty LIMIT 10 OFFSET x) {
SELECT * FROM rozmiary WHERE pid=produkty.id
}

oczywiście jest to pseudokod

wolałbym otrzymywać listę produktów w jednym zapytaniu
np. SELECT * FROM produkty AS p JOIN rozmiary AS r ON r.id=r.pid LIMIT
10 OFFSET x
co oczywiście da mi tylko 10 wierszy a nie 10 produktów

czy jest jakieś sensowne rozwiązanie tego problemu?

pozdrawiam

ps. rzecz dotyczy php, gdzie lepiej dużo nie odpytywać bazę





Grzegorz Szyszlo - 26-04-2006 01:21

  nn3dx wrote:

> mam taką zagwozdke, rzecz dotyczy wyświetlania produktów
> założenia: są dwie tabele w bazie mysql (w uproszczeniu, może być więcej
> ale to już nieważne dla przykładu)
> -pierwsza - produkty (id, nazwa)
> -druga - rozmiary (id, pid, nazwa)
>
> i chciałbym wyświetlić 10 produktów zaczynając od produktu x wraz z ich
> rozmiarami
> obecnie robie to przez kolejne zapytanie do każdego produktu:
>
> foreach (SELECT * FROM produkty LIMIT 10 OFFSET x) {
> SELECT * FROM rozmiary WHERE pid=produkty.id
> }
>
> oczywiście jest to pseudokod
>
> wolałbym otrzymywać listę produktów w jednym zapytaniu
> np. SELECT * FROM produkty AS p JOIN rozmiary AS r ON r.id=r.pid LIMIT
> 10 OFFSET x
> co oczywiście da mi tylko 10 wierszy a nie 10 produktów
>
> czy jest jakieś sensowne rozwiązanie tego problemu?

obawiam sie ze wprost nie ma. musialbys posadzic procedure
po stronie bazy, albo uzyc subselecta tylko nie wiem czy w mysql sie da,
wiem ze jest z tym problem. moglbys uzyc czegos takiego:

SELECT * FROM produkty AS p JOIN rozmiary AS r ON r.id=r.pid WHERE p.id
IN (SELECT id FROM produkty LIMIT 10 OFFSET x);

subselect generuje ci liste produktow, i reszta zapytania jest do tej
listy ograniczona. mysle ze mysql tego nie lyknie.
czemu nie pomyslisz o postgresie? takie sytuacje to glowny powod,
dlaczego mysql praktycznie wogole nie uzywam. tak wiem wiem.
mysql jest powszechnie hostowany ;)

> ps. rzecz dotyczy php, gdzie lepiej dużo nie odpytywać bazę

php to juz inny problem ;) ale faktem jest, ze nie ma sensu w kolko
pytac o to samo. pewnie jakis skrypt osadzony w pliku html, jak to
zwykle z php bywa.

jak wyswietlasz po 10, to sie zastanow
czy nie warto ostatniego wiersza wyswietlac jako pierwszego
przy nastepnej stronie, czyli skaczesz offsetem co 9 w twoim
przypadku.

znik.




draven - 28-04-2006 00:51
=?iso-8859-2?q?Re:_zapytanie_do_dw=F3ch_tabel_z_limitem_wiers zy?=
  Grzegorz Szyszlo napisał(a):

>
> obawiam sie ze wprost nie ma. musialbys posadzic procedure
> po stronie bazy, albo uzyc subselecta tylko nie wiem czy w mysql sie da,
> wiem ze jest z tym problem. moglbys uzyc czegos takiego:
>
> SELECT * FROM produkty AS p JOIN rozmiary AS r ON r.id=r.pid WHERE p.id
> IN (SELECT id FROM produkty LIMIT 10 OFFSET x);
>
> subselect generuje ci liste produktow, i reszta zapytania jest do tej
> listy ograniczona. mysle ze mysql tego nie lyknie.
> czemu nie pomyslisz o postgresie? takie sytuacje to glowny powod,
> dlaczego mysql praktycznie wogole nie uzywam. tak wiem wiem.
> mysql jest powszechnie hostowany ;)
>
> > ps. rzecz dotyczy php, gdzie lepiej dużo nie odpytywać bazę
>
> php to juz inny problem ;) ale faktem jest, ze nie ma sensu w kolko
> pytac o to samo. pewnie jakis skrypt osadzony w pliku html, jak to
> zwykle z php bywa.
>
> jak wyswietlasz po 10, to sie zastanow
> czy nie warto ostatniego wiersza wyswietlac jako pierwszego
> przy nastepnej stronie, czyli skaczesz offsetem co 9 w twoim
> przypadku.
>
> znik.

ładne rozwiązanie i mi sie podoba, ale niestety nie dla mysql:
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME
subquery
sprawdzałem w mysql 4.1, które jest najpowszechniejsze na serwerach

masz racje, trzeba zainteresować się postresql, wtedy dużo rzeczy
można w procedurkach zrobić....

to może ktoś zna jakieś inne rozwiązanie?

pozdrawiam
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    mecze sie i mecze i nic - zapytanie czesciowe [sql][pgsql] zapytanie sql [mysql 4.0] SELECT t1.id, t1.foo FROM t1 oraz COUNT t2 w jednym zapytaniu. [MySQL] Zapytanie z pliku , wynik do pliku pytanie o zapytanie z having count = count z innej kolumny Jedno zapytanie różne wyniki w polu data [mysql i mysql+php] Problem z zapytaniem SQL - Excel i baza danych SQL Serwer 2000 [MySQL5] problem z zastosowanie funkcji, procedury w celu unikniecia powtórzeń kodu w zapytaniach pobieranie w zaleznosci czy pole pierwsze czy drugie -kurde nie wiem jak zapytac [msssql, transact-sql] prosze o zapytanie ktore odzwierciedlistrukturę bazy
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • ponland.htw.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com