2017-10-05 10 views
0

Webアプリケーション内でユーザーチャットを開発しています。ログインしたユーザーと他のユーザーとのチャット履歴を表示するMySQLクエリ

ゴール:ログインしたユーザーがチャットを行ったユーザーのリストと、そのようなユーザーの近くにある最後のメッセージ(そのユーザーまたはログインしているユーザーのいずれかによって書き込まれたもの)。

現在のMySQLのクエリ:よく

SELECT id, 
     user_to, 
     user_from, 
     body, 
     msg_time 
FROM chat 
WHERE id IN (SELECT MAX(id) 
      FROM chat WHERE user_to=:id 
      OR user_from=:id 
      GROUP BY user_to,user_from) 
ORDER BY msg_time DESC 

作品。しかし!任意のユーザBとの任意のユーザAのチャットに対して、現在のリクエストは、ユーザAがユーザBに送信した最新のメッセージとユーザBがユーザAに送信した最新のメッセージの2行を表示する。 「行」の下では、データのブートストラップ行を意味します。列1はチャットが行われるユーザーのアイコンであり、列2は2人のユーザー間の最新のメッセージで、列3は最後のメッセージの時刻です。

しかし、要求がそのユーザーAとユーザーBがチャットしていた表示されるはず、とだけそれの上に私の脳を吹き、ユーザーAとB

の間に作られた最新のメッセージで、一度これを表示します。私は質問を短くしておきたいと思います。私は近くにいますが、最終的にこの問題を解決することはできません。アドバイスありがとう!

+0

試しのようなものを追加する 'とuser_to>対称性を破る内側のクエリでuser_from' –

答えて

0

あなたはこれを試してみて、ユーザIDでログインしてから試してください現在でuser_idを置き換えることができ

SELECT id, 
    user_to, 
    user_from, 
    body, 
    msg_time 
    FROM chat 
WHERE id IN (SELECT MAX(id) 
     FROM chat WHERE user_to=:id 
     OR user_from=:id 
GROUP BY IF (`user_from`=:user_id, `user_to`,`user_from`)) 
ORDER BY msg_time DESC 
関連する問題