Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z sortowaniem przed grupowaniem
menda90
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 22.11.2008

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


Witam, wiem że temat był dużo razy poruszany ale nadal nie potrafię zastosować go do swoich potrzeb.
Mam tabelę:
  1. CREATE TABLE IF NOT EXISTS `wiadomosci` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `grupa` int(11) NOT NULL,
  4. `wiadomosc` varchar(2048) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  5. `from_id` int(11) NOT NULL,
  6. `to_id` int(11) NOT NULL,
  7. PRIMARY KEY (`id`)
  8. );
  9.  
  10.  
  11. INSERT INTO `wiadomosci` (id, grupa, wiadomosc, from_id, to_id) VALUES (`1`, `1`, `Witam`,`20`,`30`);
  12. INSERT INTO `wiadomosci` (id, grupa, wiadomosc, from_id, to_id) VALUES (`2`, `1`, `Witam2`,`20`,`30`);
  13. INSERT INTO `wiadomosci` (id, grupa, wiadomosc, from_id, to_id) VALUES (`3`, `2`, `Witam3`,`22`,`30`);
  14. INSERT INTO `wiadomosci` (id, grupa, wiadomosc, from_id, to_id) VALUES (`4`, `2`, `Witam4`,`30`,`22`);
  15. INSERT INTO `wiadomosci` (id, grupa, wiadomosc, from_id, to_id) VALUES (`5`, `2`, `Witam5`,`22`,`30`);


i chcę wyciągnąć najświeższą wiadomość dla id uzytkownika="30" , gdzie grupowanie jest po polu "grupa", a najświeższa wiadomość to ta, która ma największe "id".

  1. SELECT wiadomosc FROM wiadomosci WHERE from_id=30 OR to_id=30 GROUP BY grupa ORDER BY id DESC

wyciąga mi
  1. Witam
  2. Witam3

a potrzebne
  1. Witam2
  2. Witam5

jakiś pomysł?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





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




Mysql w takich wypadkach jak podałeś zwraca wartość kolumny dla pierwszego wiersza danej grupy. To co chcesz więc osiągnąć, to ustawić wiersze we własciwej kolejności zanim dojdze do grupowania. Jako że ORDER BY wykonuje się dopiero po GROUP BY, to musisz do grupowania wysłać podzapytanie z posortowanymi wynikami. W tym wypadku musisz więc "odwrócić" tabelę w podzapytaniu i potem ją pogrupować.

A co do celu, to chyba jest taki, by użytkownik widział najświeższe wiadomości związane z sobą (stąd sprawdzanie from_id i to_id) w każdej z grup.
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.10.2025 - 11:23