Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] GROUP BY i sortowanie desc
Patman
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 16.06.2009

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


Potrzebuję pomocy w zbudowaniu zapytania.
Tabela posiada wpisy z forum. Posiada kolumny id, autor, temat (do którego wątku należy wpis), tekst, date. Chcę wyświetlić tabelę z wszystkimi tematami, a obok nazwy tematu ma być ostatni wpis w danym temacie (wraz z autorem i datą). Czyli taka informacja: [TEMAT] ostatni wpis [skrócony tekst] przez [autor] dnia [data + godzina]
Mam coś takiego:
  1. SELECT id, tekst, temat, date, autor FROM wpisy GROUP BY temat ORDER BY date DESC

Powstaje mi lista tematów, ale z pierwszym wpisem w danym temacie, a chciałbym ten z ostatnią datą.
Co dopisać do ORDER BY, aby wybrał to co potrzebuję?
U mnie skrypt jest nieco bardziej rozbudowany, bo korzystam z kilku tabel.
Go to the top of the page
+Quote Post
Mefiuu
post
Post #2





Grupa: Zarejestrowani
Postów: 371
Pomógł: 18
Dołączył: 23.11.2008

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


nie czasem zamiast
  1. ORDER BY date DESC
to dać
  1. ORDER BY date ASC
? (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
jacusek
post
Post #3





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

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


może zamiast desc to asc?
Go to the top of the page
+Quote Post
Patman
post
Post #4





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 16.06.2009

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


To czy na końcówce dam ASC czy DESC, spowoduje tylko posortowanie listy tematów pod względem ostatniej aktywności.
Oto moja przykładowa tabela:
|id| autor | temat | tekst | date |
|1 | Ala | Ala ma kota | Ala ma | 09:00:00 2010-01-01 |
|2 | Kot | Ala ma kota | kota | 09:30:00 2010-01-01 |
|3 | Ala | Ala ma kota | a kot ma | 10:05:00 2010-01-01 |
|4 | Kot | Ala ma kota | Alę | 10:20:00 2010-01-01 |
|5 |Ewald | Kot nie żyje| Kot zmarł| 00:00:00 2010-01-02 |

Chciałbym wyświetlić taką informację:
Na forum:
Kot nie żyje Ostatni wpis: "Kot zmarł" o 00:00:00 dnia 2 stycznia 2010 przez Ewald.
Ala ma kota Ostatni wpis: "Alę" o 10:20:00 dnia 1 stycznia 2010 przez Kot.

A przez moje zapytanie uzyskuję jedynie:
Kot nie żyje Ostatni wpis: "Kot zmarł" o 00:00:00 dnia 2 stycznia 2010 przez Ewald.
Ala ma kota Ostatni wpis: "Ala ma" o 09:20:00 dnia 1 stycznia 2010 przez Ala.
Go to the top of the page
+Quote Post
thek
post
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Problemem tutaj jest to, że GROUP BY wykonuje się przed ORDER BY. Przez to GROUP BY wypluwa na łączeniu temat o najniższym id napotkanym. Da się to zrobić na kilka sposobów. Najprostsze to - pchnąć sortowanie tabeli malejąco DESC do podzapytania i to je grupować lub próbować operować funkcją max.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 22:45