sql >> Databáze >  >> Database Tools >> phpMyAdmin

Vytvoření seznamu zpráv v SQL

Myslím, že váš dotaz přináší „správné“ výsledky, protože pokud byste chtěli vidět poslední zprávu v některých konverzacích, měli byste seskupit podle conversation_id . Toto pole vás však ve schématu nevidím.

Pokud uděláte WHERE sender_id = 3 GROUP BY receiver_id , pak je správně, že vám tento dotaz vrátí zprávy 1 a 7, protože tyto zprávy byly odeslány jiným lidé, takže ve vašem návrhu jsou to různé konverzace.

Pokud chcete vidět pouze úplně poslední vámi odeslanou zprávu, stačí odstranit GROUP BY ve druhé části vašeho UNION . V opačném případě zvažte přepracování schématu.

UPRAVIT:

Zkuste tento dotaz:

SELECT m.message_id, u.username, m.subject, m.message,
       m.status, UNIX_TIMESTAMP(m.date) as `date`
  FROM users u
  LEFT JOIN messages m ON m.sender_id = u.id
 WHERE m.message_id IN (
    SELECT max(message_id) 
      FROM messages
     WHERE receiver_id = 3 OR sender_id = 3
     GROUP BY least(sender_id,receiver_id), 
              greatest(sender_id,receiver_id)
    );

Několik poznámek:

  1. UNION již není potřeba;
  2. Tento přístup bude považovat všechny e-maily mezi 2 stranami za jednu konverzaci, což není vždy pravda. Možná budete chtít tento přístup přepracovat;
  3. Použít vyhrazená slova (jako date) je špatný styl ) pro názvy nebo aliasy sloupců se tomu snažte vyhnout. Nebo použijte backticks, pokud je používáte.



  1. Chyba syntaxe spouštěče phpmyadmin mysql

  2. 127.0.0.1 je přístupný/funkční, ale localhost není přístupný/nefunkční

  3. phpMyAdmin nemůže exportovat databázi

  4. Vložit data do Temp tabulky pomocí dotazu