Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] Zapytanie do bazy
Forum PHP.pl > Forum > Przedszkole
gazelek
Witam,
mam tabele w bazie ktora zawiera zdjecia. Znajduje sie w niej klucz obcy, ktory jest odpowiednikiem klucza glownego z tabeli uzytkownikow. Chcialbym wypisac jednym zapytaniem ostatnio dodane zdjecie kazdego uzytkownika, ktory dodatkowo spelnia jakis warunek (nieistotne jaki, na kodzie bedzie wszystko widac).
Kod
SELECT * FROM galeria WHERE o_id IN (SELECT c_id FROM tabela WHERE p_id=2) ORDER BY id


Powyzsze zapytanie wypisze mi wszystkie zdjecia spelniajace warunek. A teraz chcialbym, zeby wypisalo mi po jednym zdjeciu dla kazdej wartosci o_id. Myslalem nad czyms takim

Kod
SELECT * FROM galeria WHERE o_id IN (SELECT c_id FROM tabela WHERE p_id=2) GROUP BY o_id ORDER BY id


Problem w tym, ze najpierw wykona sie grupowanie, a pozniej sortowanie (klauzula ORDER). W zwiazku z tym za kazdym razem zostanie wypisane pierwsze zdjecie (najstarsze) - a nie najnowsze. Jak sobie z tym poradzic?
ferrero2
order by id DESC questionmark.gif

Poza tym da się to zrobić bez group by , wystarczy odpowiedni sortowanie + LIMIT.
Quider
ja podzapytaniu proponowałbym dać alias
slawcio
select t.c_id as "Id uzytkownika",max(g.id) as "Id ostatnio dodanego zdjecia" from galeria g inner join tabela t on g.o_id=t.c_id where t.p_id=2 group by t.c_id
gazelek
Cytat(slawcio @ 18.04.2009, 11:48:40 ) *
select t.c_id as "Id uzytkownika",max(g.id) as "Id ostatnio dodanego zdjecia" from galeria g inner join tabela t on g.o_id=t.c_id where t.p_id=2 group by t.c_id


Blisko - otrzymuje dzieki temu najwieksze id (czyli id zdjecia ostatnio dodanego). Chcialem jednak wyciagnac odrazu jednym zapytaniem reszte potrzebnych danych z bazy (czyli sciezka zdjecia, opis, data dodania). Dopisalem wiec po slowie select odpowiednie kolumny, ktore chce wybrac. Efekt jest taki, ze dostaje w kolumnie ID ostatnio dodanego zdjecia najwieksze ID, ale reszta pol pochodzi z pierwszego rekordu w bazie (czyli z tego o najstarszym id). Da sie to jakos zawrzec w jednym zapytaniu? Bo w sumie moge dolozyc kilka dodatkowych, ale wtedy niepotrzebnie wzrosnie ilosc zapytan do bazy, a tego bym chcial uniknac...

Edit: calkowity balwan ze mnie. Rozwiazanie jest banalne:

Kod
SELECT *
FROM galeria
WHERE id
IN (

SELECT max( id )
FROM galeria
WHERE o_id
IN (

SELECT c_id
FROM tabela
WHERE p_id =2
)
GROUP BY o_id
)



Dziekuje wszystkim za pomoc!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.