![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 3 Dołączył: 28.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
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? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 171 Pomógł: 32 Dołączył: 5.08.2008 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
order by id DESC
![]() Poza tym da się to zrobić bez group by , wystarczy odpowiedni sortowanie + LIMIT. -------------------- ---------------------------
"Jeżeli trzeci dzień z rzędu nie chce Ci się pracować tzn że dziś jest ŚRODA ! Algorytmy , Programowanie , Tworzenie WWW - SPRAWDŹ |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 91 Pomógł: 9 Dołączył: 6.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
ja podzapytaniu proponowałbym dać alias
-------------------- www.quider.pl <- moja prywatna strona
Pomogłem? Kliknij Pomógł |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 1 Dołączył: 23.06.2008 Skąd: lublin Ostrzeżenie: (0%) ![]() ![]() |
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
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 3 Dołączył: 28.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
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! Ten post edytował gazelek 18.04.2009, 20:19:41 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 07:30 |