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

mysqlでユーザーごとにグループ化されたテーブルからの最新メッセージの検索

    これを試してみてください:

    select * from messages mwhere not presents(select 1from messages mmwhere(mm.fromuser=m.fromuserまたはmm.fromuser=m.touser)AND(mm.touser=m.touserまたはmm.touser=m.fromuser)およびmm.timestamp> m.timestamp)およびm.fromuser='user1'またはm.touser='user1';

    デモはこちら

    今後は、2人のユーザー間の会話に特定の会話のフラグを立てると、すべてのメッセージが会話に属するため、ユーザーが関与している会話や、に関連するメッセージに関する情報を見つけるのがはるかに簡単になります。会話。とにかく。

    代わりにこれを試してください。うーん。

    select m.* 
      from messages m 
         left join messages m2 
           on ((m.fromuser = m2.fromuser and m.touser = m2.touser) 
               or (m.fromuser = m2.touser and m.touser = m2.fromuser)) 
             and m.timestamp < m2.timestamp 
      where (m.fromuser = 'user1' or m.touser = 'user1') 
      and m2.id is null;
    

    not existsよりも優れている可能性があります バージョン、たとえ私がそれを修正することができたとしても。

    このフィドルは実際に機能します




    1. SQLServerサブクエリが複数の値を返しました。サブクエリが=、!=、<、<=、>、> =の後に続く場合、これは許可されません。

    2. どちらの時系列データベースが優れているか:TimescaleDBとInfluxDB

    3. PHPに改行を読み取らせて として返す方法

    4. Laravelの移行:既存の外部キーからonDelete('cascade')を削除します