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.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
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.pldoc.pisz.plpdf.pisz.plponland.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 |
|