Autor Zpráva
tappedout.cz
Profil *
Dobrý den,
již několik hodin si lámu hlavu se SQL dotazem, který implementuji v jazyce PHP. Chtěli jsme vytvořit systém zpráv, takový jako je na Facebook. To znamená nevypisovat každou zprávu, ale seskupovat zprávu dle jejího adresáta (nebo odesílatele). Tak i tak je to vždy jeden uživatel.

Všechno již máme hotové, až na výpis jednotlivých konverzací. Nenapadá mě způsob, kterým bych dokázal vypsat záznam pouze 1x od daného uživatele. Momentálně to máme takto:

            $query = "SELECT *
                      FROM messages
                      WHERE messages.sender_account_id = $account_id
                      OR messages.recipient_account_id = $account_id
                      GROUP BY messages.recipient_account_id
                      ORDER BY messages.created DESC
                      LIMIT ". $list ."
                      OFFSET " . $by;

Ovšem to stále není dostačující, protože se uživatel zobrazí 2x, protože když odešlu zprávu uživateli s ID 10 - tak se zobrazí záznam jednou a když on napíše zprávy mně, tak se zobrazí podruhé. Tzv. tam je stejně duplikace výpisu.

Nemáte někdo s tímto zkušenosti, prosím? :) Budu moc rád, za jakékoliv řešení...
Joker
Profil
tappedout.cz:
Jestli to dobře chápu, je potřeba seskupit ne podle adresáta, ale podle té strany komunikace, která není aktuální uživatel.
Mělo by fungovat:
GROUP BY IF(messages.sender_account_id = $account_id, messages.recipient_account_id, messages.sender_account_id)
tappedout.cz
Profil *
Joker:
Přesně tak, pochopil jste to správně. Vážím si pomoci, děkuji moc.


Joker:
Ještě se omlouvám. Řešení je sice funkční, ale nevšiml jsem si, že se výpis konverzací neřadí dle nejnovější.

V messages.created je uložen čas odeslání zprávy pomocí funkce Time(). Tudíž jsem čekal, že by pouhé messages.created DESC mohlo stačit nebo je to špatně? Zkoušel jsem dosadit i dle message_id a stejně to nepomohlo.
Kajman
Profil
Mrkněte na třetí část na
Některé časteji řešené dotazy pro MySQL - FAQ » Nalezení řádků s maximální (minimální) hodnotou

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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