Autor | Zpráva | ||
---|---|---|---|
martin1312 Profil |
#1 · Zasláno: 30. 3. 2013, 21:03:04
Zdravím,
neviem si rady s týmto: mám tabuľku messages a potrebujem vypísať posledné prijaté správy určitého užívateľa ale tak, aby sa radili ako "konverzacie" a zobrazila sa v tom výpise iba posledná správa.
štruktúra tabuľky: a toto chcem dosiahnúť: V podstate čiastočne funguje tento dotaz SELECT * FROM `messages` WHERE `user_id_to` = 5 GROUP BY `user_id_from` ORDER BY `date_created` DESC , ale ten vypíše prvú správu v každej konverzácií, ja potrebujem poslednú.
Viete ako na to? Ďakujem |
||
DJ Miky Profil |
#2 · Zasláno: 30. 3. 2013, 21:13:24
Můžeš se inspirovat příkladem ze zdejších FAQ - Nalezení řádků s maximální (minimální) hodnotou, konkrétně ten třetí dotaz. Jen místo maximální ceny budeš hledat nejvyšší datum zprávy.
|
||
martin1312 Profil |
#3 · Zasláno: 30. 3. 2013, 21:16:26
DJ Miky:
Tomu som sa chcel presne vyhnúť, ak to ide nejako jednoduchšie :) Ale ďakujem za reakciu. |
||
DJ Miky Profil |
#4 · Zasláno: 30. 3. 2013, 21:21:27
Jednodušeji to jde v případě, že by ti stačilo např. jen datum poslední zprávy, ale ne její text. Při GROUP BY totiž můžeš využít agregační funkce a pro datum poslední zprávy by to tedy bylo:
SELECT *, MAX(date_created) datum_posledni_zpravy FROM ... GROUP BY user_id_from ... |
||
martin1312 Profil |
#5 · Zasláno: 30. 3. 2013, 21:26:04 · Upravil/a: martin1312
Aha, jasne. No ja potrebujem aj ten text, takže použijem ten príklad z FAQ, ďakujem za vysvetlenie.
DJ Miky: mohol by si ma trochu nakopnúť? Tie vnorene dotazy mi akosi nejdú SELECT a.* FROM `messages` a, (SELECT b.id, b.date_created FROM `messages` b GROUP BY b.user_id_from ORDER BY b.date_created DESC) c WHERE a.user_id_to = 5 AND a.id = c.id AND a.date_created = c.date_created vráti to isté, čo som uviedol hore - teda tie prve zaznamy, nie posledne tak sa mi to podarilo, ak by niekto potreboval vedieť ako: select a.* from messages a, (select b.user_id_from, max(b.date_created) date_created from messages b group by b.user_id_from) c where a.user_id_from= c.user_id_from and a.date_created= c.date_created and a.user_id_to = 5 |
||
Časová prodleva: 11 let
|
0