![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 87 Pomógł: 0 Dołączył: 25.03.2010 Skąd: Radom Ostrzeżenie: (10%) ![]() ![]() |
Panowie,
jak moge posortować wyniki pobrane przez zapytanie mysql?
obecnie mam cos takiego, teraz to co otrzymałe chce posortować wg yyy.zzz czyli powinienem jakoś dodać do zapytania SQL
ale już raz to występuje. Wiem, ze jesteście w stanie mi pomóc ![]() Ten post edytował qweluke 14.04.2010, 22:00:52 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Nieautoryzowani Postów: 2 249 Pomógł: 305 Dołączył: 2.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
Proszę:
Kod ORDER BY xxx.aaa DESC, yyy.bbb ASC W Google byś znalazł. Ten post edytował pedro84 14.04.2010, 22:07:28 -------------------- Google knows the answer...
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 87 Pomógł: 0 Dołączył: 25.03.2010 Skąd: Radom Ostrzeżenie: (10%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Nieautoryzowani Postów: 2 249 Pomógł: 305 Dołączył: 2.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dziwisz się?
-------------------- Google knows the answer...
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 87 Pomógł: 0 Dołączył: 25.03.2010 Skąd: Radom Ostrzeżenie: (10%) ![]() ![]() |
tak tez probowalem i tez nic z tego.
poza tym, limit musi byc przy pierwszym sortowaniu (DESC) ponieważ tym sposobem wybieram najstarsze (najaktualniejsze) dane z bazy. w bazie jest kilkadziesiąt rekordów które są przypisane do pięciu użytkowników i najpierw sortuje je aby otrzymać najnowsze u samej góry ( ORDER BY xxx.id_xxx DESC) potem wybieram te tylko te nowe (LIMIT 5) i na końcu sortuję po użytkowniku (nazwisku). jest jakieś inne rozwiązanie tego problemu?> |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 87 Pomógł: 0 Dołączył: 25.03.2010 Skąd: Radom Ostrzeżenie: (10%) ![]() ![]() |
przy takim zapytaniu wywala błąd
nie mam na to zielonego pomysły :/ |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Zrób dump-a bazy danych, albo zaprezentuj strukturę tabel i co ważniejsze wklej tutaj odpowiedni fragment kodu +/- kilka linijek.
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 87 Pomógł: 0 Dołączył: 25.03.2010 Skąd: Radom Ostrzeżenie: (10%) ![]() ![]() |
Tak wyglada tabela xxx. Na czerwono zaznaczyłem powtarzające się rekordy, na zielono autoinkrementowane id aby wiedzieć który z tych rekordów (zaznaczonych na czerwono) jest najnowszy (najstarszy). Chcę wybrać te X użytkowników dla którego id_grafiku jest najstarsze. (gdzie w chwili obecnej X=5, to ilość użytkowników w bazie) np. teraz uzytkownik o ID 1 ma dwa wpisy, id_grafiku 2 oraz 12. Chcę wybrać tylko tą 12. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Cytat teraz uzytkownik o ID 1 ma dwa wpisy, id_grafiku 2 oraz 12. Chcę wybrać tylko tą 12 Nie do końca Cię rozumiem, chcesz wybrać najnowsze rekordy z tabeli xxx dla każdego użytkownika z osobna, czy może 5 użytkowników, którzy zostali jako ostatni dopisani do grafiku? |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 87 Pomógł: 0 Dołączył: 25.03.2010 Skąd: Radom Ostrzeżenie: (10%) ![]() ![]() |
z tabeli XXX chce wybrać najnowsze rekordy dla każdego użytkownika z osobna ale jednym zapytaniem a następnie te dane które wybrałem chcę jeszcze posortowac po nazwisku.
chodzi o rekordy zaznaczone w niebieskim kwadracie czyli inaczej mówiąc, chcę połaczyć te dwa zapytania SQL w jedno:
(wybieram te najnowsze które mnie interesują)
(a tym zapytaniem sortuje te dane wg. nazwiska, z tym, że to zapytanie zwraca mi wszystkie rekordy a nie te najnowsze) Ten post edytował qweluke 15.04.2010, 09:53:18 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
A takie zapytanie nie działa?
Jeśli nie działa to spróbuj takim kodem: W przypadku niepowodzenia dostaniesz komunikat błędu. Wklej go tutaj. |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 87 Pomógł: 0 Dołączył: 25.03.2010 Skąd: Radom Ostrzeżenie: (10%) ![]() ![]() |
nooo, w koncu zadziałało ale w takiej postaci
dziękuje Ci bardzo za pomoc, bez Ciebie bym sobie nie poradził ![]() jeszcze szybkie pytanie "AS last_five" co robi? jeśli rekordów nei będzie 5 a 80, także zadziała? Ten post edytował qweluke 15.04.2010, 10:19:28 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 87 Pomógł: 0 Dołączył: 25.03.2010 Skąd: Radom Ostrzeżenie: (10%) ![]() ![]() |
działa świetnie, tylko że pojawił się jeszcze jeden problem.
Poprzez zapytanie
wyświetla mi 2x usera o ID 6 ponieważ ma dwa najstarsze wpisy (id_grafiku 18 i 17) a przez to, user o ID1 nie jest wyświetlany ponieważ limit jest na 6 (zmienna ilosc uzytkownikow, jeśli uzytkowników będzie 20, limit będzie 20) więc zwiększenie limitu na 7 odpada. ![]() Muszę przerobić to zapytanie tak, aby wybierało łącznie 6 wpisów ale tylko jeden wpis dla jednego użytkownika gdzie id_grafiku jest najstrasze, a następnie sortował wynik po nazwisku. Ktoś wie jak to zrobić? naprawdę nikt nie wie? :/ Ten post edytował qweluke 17.04.2010, 22:19:19 |
|
|
![]()
Post
#16
|
|
![]() Grupa: Nieautoryzowani Postów: 2 249 Pomógł: 305 Dołączył: 2.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
Poczytaj o GROUP BY, dużo informacji masz...na tym forum. Klik
-------------------- Google knows the answer...
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 87 Pomógł: 0 Dołączył: 25.03.2010 Skąd: Radom Ostrzeżenie: (10%) ![]() ![]() |
Panowie,
nie potrafie sobie z tym poradzić :/ za każdym razem nie wybiera mi wszystkich danych. gdy uzyje
wyświetla mi 2 razy użytkownika o ID 6, ponieważ posiada dwa najstarsze rekordy (xxx.id_grafiku=18 i 17) Natomiast przy zapytaniu z grupowaniem
wyświetla mi pierwsze 6 rekordów, nawet jesli użyje
to zwracany wynik jest taki sam może ktos mnie nakierowac, co robie źle? może to jeszcze lepiej naszkicuje mój problem/zapytanie: wybierz po jednym najstarszym wpisie dla każdego z 6 użytkowników z tabeli xxx, uzytkownicy gdzie xxx.id_uzytkownika=uzytkownicy.id Ten post edytował qweluke 22.04.2010, 16:53:17 |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Słowo wyjaśnienia. GROUP BY grupuje rekordy według wartości w danej kolumnie i na określonej grupie rekordów wykonuje zapytanie. My chcemy uzyskać najnowsze wpisy do grafiku dla każdego użytkownika z osobna. Jak się za to zabrać? Przede wszystkim grupujemy rekordy według identyfikatora użytkownika, a to w praktyce oznacza, że zapytanie zostanie wykonane dla każdej grupy rekordów i w poszczególnej grupie rekordów wszystkie rekordy "należą" do danego użytkownika. Niestety pobrany zostanie tylko jeden rekord z każdej grupy, ten pierwszy w kolejności w domyślnym sortowaniu. Jeżeli zatem chcemy wybrać te najnowsze rekordy z grafiku, to musimy najpierw posortować rekordy w odpowiedniej kolejności, czyli malejąco po id_grafiku. Teraz zapytanie:
Teraz dołączmy do tego wszystkie informacje o użytkowniku: Zapytanie takie zwróci wszystkie kolumny z tabeli xxx i wszystkie kolumny z tabeli uzytkownicy, zatem na pewno w wyniku pojawią się dwie kolumny o takiej samej zawartości poszczególnych wierszy (będą to kolumny z identyfikatorami użytkowników z obu tabel). Aby tego uniknąć musielibyśmy określić jakie dokładnie kolumny chcemy pobrać. Pozostaje jeszcze kwestia sortowania. Tak uzyskane wyniki są posortowane według id użytkownika począwszy od najmniejszego do największego. Tę kolejność możemy odwrócić dokładając do GROUP BY słowo DESC: SELECT ... GROUP BY posortowane.id_uzytkownika DESC Możemy również wymusić, aby wyniki były posortowane według id_grafiku. Dopisujemy na końcu ORDER BY posortowane.id_grafiku Ten post edytował mortus 22.04.2010, 21:08:47 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 00:17 |