sql >> Databasteknik >  >> RDS >> Mysql

Privat meddelandesystem. Listar sista meddelandet för varje konversation

Detta förutsätter id är en kolumn för automatisk ökning:

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))

Förutsatt att du har id_from och id_to indexerad, kommer denna variant med största sannolikhet att fungera bättre eftersom MySQL inte vet vad man ska göra med en ELLER:

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

Så här får du meddelanden för dessa ID:n:

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)


  1. Hur man skapar DMZ för EBS R12

  2. Få radposition i MYSQL-fråga

  3. Bästa metoden för att lagra en lista med användar-ID:n

  4. PHP MYSQL Blog Archive Menu per år och månad