2016-07-22 6 views
0

こんにちは私はPHPで直接メッセージの受信トレイを作成しようとしています。ログインしたユーザーと、ログインしたユーザーがメッセージを送信した、またはログインしたユーザーにメッセージを送信したユーザーの間で、最新のメッセージを受け取るクエリを作成しようとしました。 InsatagramとTwitterがインボックスにどのように表示されているのと同様に、ログインしているユーザーとメッセージを持っている人やメッセージを送った人との間のすべての会話のリストを表示します。ダイレクトメッセージのMySqlクエリ

現在のところ、私のクエリは、ログインしているユーザーと、そのユーザーと他のユーザーとの間に最新のメッセージのみが必要なときに会話したユーザーとの間のすべての会話を表示します。私はこれを十分に説明してくれることを願っています。

今のように私のクエリ文は次のとおりです。たとえば

CREATE TABLE IF NOT EXISTS dm ( 
    id INT(11) NOT NULL AUTO_INCREMENT, 
    receiver VARCHAR(100) NOT NULL, 
    sender VARCHAR(100) NOT NULL, 
    senttime DATETIME NOT NULL, 
    message TEXT NOT NULL, 
    PRIMARY KEY (id) 
) 

id receiver sender  senttime   message 
1  Jack Will  2016-07-20 20:59:27  Hi 
2  Jack Bob  2016-07-21 20:59:27  What's up 
3  Bob Jack  2016-07-22 20:59:27  Hanging out what about 

を返す必要がありますジャック場合は、次の

SELECT * 
FROM dm 
WHERE(receiver="user") or (sender="user") 
ORDER BY senttime DESC; 

マイダイレクトメッセージテーブルは次のようになりますクエリのユーザーです

id receiver sender  senttime   message 
3  Bob Jack  2016-07-22 20:59:27  Hanging out what about you? 
1  Jack Will  2016-07-20 20:59:27  Hi 

答えて

3

sqlfiddleを参照)、このような何かを試してみてください:

SELECT * FROM dm 
INNER JOIN 
(
    SELECT MAX(id) as id FROM ( 
    SELECT MAX(id) as id, receiver as contact 
    FROM dm 
    WHERE sender="Jack" 
    GROUP BY receiver 
    UNION ALL 
    SELECT MAX(id) as id, sender as contact 
    FROM dm 
    WHERE receiver="Jack" 
    GROUP BY sender 
) t GROUP BY contact 
) d 
ON dm.id = d.id 
ORDER BY senttime DESC; 

出力は次のようになります。

id receiver sender senttime    message 
3 Bob   Jack July, 22 2016 20:59:27 Hanging out what about 
1 Jack  Will July, 20 2016 20:59:27 Hi 

実行このコードをテストデータを作成するために:

CREATE TABLE IF NOT EXISTS dm ( 
    id INT(11) NOT NULL AUTO_INCREMENT, 
    receiver VARCHAR(100) NOT NULL, 
    sender VARCHAR(100) NOT NULL, 
    senttime DATETIME NOT NULL, 
    message TEXT NOT NULL, 
    PRIMARY KEY (id) 
); 

INSERT INTO dm (receiver, sender, senttime, message) VALUES 
('Jack', 'Will', '2016-07-20 20:59:27', 'Hi'), 
('Jack', 'Bob', '2016-07-21 20:59:27', 'What\'s up'), 
('Bob', 'Jack', '2016-07-22 20:59:27', 'Hanging out what about'); 
+0

これにはありません作業。クエリでは、JackとBobの送信者と受信者の値が区別されません。 – JoOlay

+0

コードの新しいバージョンを試してください –

+0

ありがとうございました!できます! – JoOlay