sql >> データベース >  >> Database Tools >> phpMyAdmin

SQLでのメッセージリストの作成

    いくつかの会話の最後のメッセージを見たいかのように、クエリは「正しい」結果を生成していると思います。実際には、conversation_idでグループ化する必要があります。 。ただし、このフィールドはスキーマには表示されません。

    WHERE sender_id = 3 GROUP BY receiver_idを実行する場合 、それなら正しいです、そのクエリはあなたにメッセージ1と7を返します、'それらのメッセージは異なるに送信されました 人々、したがってあなたのデザインでは、彼らは異なる会話です。

    一般的に送信された最後のメッセージのみを表示したい場合は、GROUP BYを削除してください。 UNIONの2番目の部分 。それ以外の場合は、スキーマの再設計を検討してください。

    編集:

    このクエリを試してください:

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

    いくつかのメモ:

    1. UNION もう必要ありません;
    2. このアプローチでは、2者間のすべての電子メールが単一の会話として扱われますが、これは常に正しいとは限りません。このアプローチを再設計することをお勧めします;
    3. 予約語(dateなど)を使用するのは悪いスタイルです )列の名前またはエイリアスについては、これを避けてください。または、バックティックを使用する場合はバックティックを使用します。



    1. MicrosoftSQLServerを解決する方法。エラー233。プロバイダー:SSLプロバイダー

    2. データフローから変数へのSSISセットの結果セット

    3. PHPMyadminはmysqlエラーメッセージを表示しません

    4. 新しいバージョンのDBeaverEE7.2をダウンロードすることを忘れないでください