sql >> Database >  >> RDS >> Mysql

Privé berichtensysteem. Het laatste bericht van elk gesprek weergeven

Dit veronderstelt id is een kolom voor automatisch ophogen:

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

Ervan uitgaande dat je id_from . hebt en id_to geïndexeerd, zal deze variant waarschijnlijk beter presteren omdat MySQL niet weet wat te doen met een OR:

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

Hier leest u hoe u de berichten voor die id's kunt krijgen:

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. Hoe een onjuiste tekenreekswaarde in MySQL te herstellen

  2. SQL Oracle-telclusters

  3. Wat is een uitschieter bij een zoekopdracht en hoe u deze kunt oplossen?

  4. Kunnen er meerdere primaire sleutels op een enkele tafel bestaan?