Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MYSQL] Zapytanie do bazy
gazelek
post 17.04.2009, 21:05:07
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?
Go to the top of the page
+Quote Post
ferrero2
post 17.04.2009, 22:06:33
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 questionmark.gif

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Ź
Go to the top of the page
+Quote Post
Quider
post 17.04.2009, 22:23:12
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ł
Go to the top of the page
+Quote Post
slawcio
post 18.04.2009, 10:48:40
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
Go to the top of the page
+Quote Post
gazelek
post 18.04.2009, 15:00:13
Post #5





Grupa: Zarejestrowani
Postów: 85
Pomógł: 3
Dołączył: 28.02.2008

Ostrzeżenie: (0%)
-----


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!

Ten post edytował gazelek 18.04.2009, 20:19:41
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 07:30