Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: GROUP BY i sortowanie
Forum PHP.pl > Forum > Bazy danych > MySQL
Kinool
mam problem z GROUP BY i prawidlowym posortowaniem wynikow

mam dwie tabele wspole pole to t1_id jedna odopwiada za artykul a druga za komentarze, t1_id to id artyulu i taym samy przyporzadkowanie komentarzy do konkretnego artykulu.

Problem sie pojawia jak chce zrobil liste ostatnich komentarzy do danego artykulu uzywam czegos takiego

  1. SELECT t1.temat, t3.nick, t2.komentarz FROM t1, t2, t3 WHERE t1.id=t2.art_id AND t2.autor_id=t3.id GROUP BY t1.id ORDER BY t2.czas DESC


zamiast podawac mi nik i tresc ostatniego komentarza i jego autora to podaje pierwszego sad.gif takjakby ORDER BY t2.czas DESC nie dzialalo sad.gif
krysk
A co było jak zmieniłeś na ASC?
t2.czas - jaki to typ pola u Ciebie?
Kinool
ASC nic nie daje a typ to integer data zapisana w formie znacznika czasu unixowego

sorki ze pisze ale czy nikt nie ma zadnego pomyslu??
FiDO
Chlopie... czytales regulamin? Co tam pisze o upominaniu sie ? Ano m.in. to, ze jak nie dostajesz dlugo odpowiedzi to moze znaczyc, ze zle sformulowas pytanie lub podales np. za malo informacji. Obie te rzeczy pasuja do Twojego posta jak ulał. Nie wiem jak inni, ale ja nie mam ochoty ani czasu meczyc sie ze zrozumieniem co autor mial na mysli. To w Twoim interesie powinno byc, zeby jak najlepiej naswietlic problem.
Wiec po pierwsze.. piszesz na poczatku ze masz dwie tabele a w zapytaniu pojawiaja sie az trzy, zaprzeczasz sam sobie. Po drugie: nazywaj tabele po ludzku, a nie jakies 't1', 't2'... jak ja sie mam domyslec o co chodzi, nie dajesz mi takiej szansy nawet jakbym bardzo chcial.
Po trzecie zapytanie, ktore podales ni cholery nie pasuje mi do Twojego pytania, zeby pobrac ostatnie komentarze do danego artykułu. Brakuje tam nawet ID artyklu, ktory bys chcial sprawdzic. A moze Ty chcesz pobrac wszystkie artykuly i ostatni komentarz do kazdego z nich (to juz nawet pasuje) ?
Kinool
nie wiem Fido czemu sie tak oburzasz! napisalem ze 2 tabele bo z 2 glownie sie korzysta 3 jesttylko po to by pobrac nazwe uzytkownika!

jesli nie brakuje ci ID artykulu to jest to w zapytaniu! (t1.id=t2.art_id) i w opisie "t1_id to id artyulu" celowo nie wsaeailem kropki ale widze ze to wielki problem

tak wiec napisze raz jeszcze zeby wszyscy mogli zrozumiec!

t1 - tabela z artykulami
struktura: | id | temat | tresc | czas | autor_id |

t2 - tabela z komentarzami
struktura: | id | art_id | autor_id | komentarz | czas |

wspomniana tabela 3 to tabela z uzytkwnikami (najmnije istotna)
t3 - tabela z userami
struktura: | id | nick | haslo |

tak wygladaja tabele (potrzebne pola w zapytaniu)

Cel:
celam topicu jest uzyskanie odpowiedzi na pytanie:

Jak powinno wygladac zapytanie aby uzyskac list (nick autora komentarza, tytul komentowanego artykulu, id komentowanego artykulu) z ostatnim komentarzem 10 artykulow.

pytanie jakie zrobilem :
  1. SELECT t1.id, t1.temat, t3.nick, t2.komentarz FROM t1, t2, t3 WHERE t1.id=t2.art_id AND t2.autor_id=t3.id GROUP BY t1.id ORDER BY t2.czas DESC


relacja laczaca tabele artykulow z tabela komentarzy t1.id = t2.art_id
relacja laczaca tabele komentarzy i tabele userow t2.autor_id = t3.id

Wynik zapytania chce pogrupowac wg. id artykulu t1.id i posortowac wg. czasu nadeslanych komentarzy ORDER BY t2.czas DESC ale cos niebardzo dziala te sortowanie jak bym chcial bo nie wyswietla ostatniego komentarza.
FiDO
Trzeba bylo tak odrazu.

Problem nie jest taki prosty, bo przy grupowaniu order w zasadzie nie dziala i jest brany powiedzmy przypadkowy rekord z danej grupy i tego nie zmienisz.

Przykladowe rozwiazania tego problemu masz tu: http://dev.mysql.com/doc/mysql/en/example-...-group-row.html
Polecam tez poczytac komentarze do tego, podaja tam bardzo ciekawe rozwiazania.
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.