sql >> データベース >  >> RDS >> Mysql

プライベートメッセージングシステム。各会話の最後のメッセージを一覧表示

    これはidを前提としています 自動インクリメント列です:

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

    id_fromがあると仮定します およびid_to インデックスを作成すると、MySQLは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
    

    これらのIDのメッセージを取得する方法は次のとおりです。

    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. フィルタされたインデックスによるオプティマイザの制限

    2. mysqlおよびphpでのAES暗号化

    3. date_part()がPostgreSQLでどのように機能するか

    4. java.sql.TimestampでJoda-Timeを使用する方法