Autor Zpráva
kopo
Profil
Prosím o pomoc s sql dotazem. Mám tabulku "zprávy" se sloupci id_odesilatel, id_prijemce,datum

Potřebuji vypsat moje konverzace s různými uživateli tak, aby se zobrazila pouze poslední zpráva konverzace. Já můžu být jak odesílatel, tak i příjemce.

Zkoušel jsem toto pro výpis konverzací:
SELECT * FROM `zpravy` WHERE (`id_odesilatel` = ".$_SESSION['id'].") or (`id_prijemce`= ".$_SESSION['id'].") ORDER BY `datum` Desc

pak se bude asi pokračovat cyklem while pro výpis všech konverzací, kde se objevuje moje $_SESSION['id'], ale nevím, jak to "zgrupovat" do konverzací s jedním uživatelem.
A pak ještě spočítat počet zpráv v konverzaci, ale to už by asi nebyl problém.
Děkuji za nakopnutí.
juriad
Profil
kopo:
SELECT *
FROM zpravy z
JOIN ( # poslední zprávy
  SELECT 
    MAX(z.id) AS id, # id poslední zprávy s partnerem
    IF(z.id_odesilatel = $id, z.id_prijemce, z.id_odesilatel) AS partner, # partner komunikace
    COUNT(z.id) AS pocet # počet zpráv s partnerem
  FROM zpravy z
  WHERE z.id_odesilatel = $id OR z.id_prijemce = $id
  GROUP BY partner
) p ON p.id = z.id
ORDER BY z.datum DESC

Ten vnější dotaz jen doplní informace o poslední zprávě - nelze je získat z vnitřního dotazu, protože neexistuj agregační funkce, která by je vrátila. Tiše předpokládám, že novější zpráva má větší ID.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: