Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Privates Nachrichtensystem. Letzte Nachricht jeder Konversation auflisten

Dies setzt id voraus ist eine Auto-Increment-Spalte:

SELECT MAX(id) AS id
FROM pms
WHERE id_to = 1 OR id_from = 1
GROUP BY (IF(id_to = 1, id_from, id_to))

Angenommen, Sie haben id_from und id_to indexiert, wird diese Variante höchstwahrscheinlich besser abschneiden, da MySQL nicht weiß, was mit einem OR:

zu tun ist
SELECT MAX(id) AS id FROM
(SELECT id, id_from AS id_with
FROM pms
WHERE id_to = 1
UNION ALL
SELECT id, id_to AS id_with
FROM pms
WHERE id_from = 1) t
GROUP BY id_with

So erhalten Sie die Nachrichten für diese IDs:

SELECT * FROM pms WHERE id IN
    (SELECT MAX(id) AS id FROM
    (SELECT id, id_from AS id_with
    FROM pms
    WHERE id_to = 1
    UNION ALL
    SELECT id, id_to AS id_with
    FROM pms
    WHERE id_from = 1) t
    GROUP BY id_with)