2016-09-14 11 views
-3

私はこのクエリを使用して、誰にメッセージを送信したのか、誰にメッセージを送信したのかを一覧にします。mySQLグループ名でグループ

SELECT messages.* 
FROM (
    SELECT MAX(lastseen) AS lastseen 
    FROM messages 
    WHERE '".$user."' IN (from,to) 
    GROUP BY IF ('".$user."' = from,to,from) 
) AS latest 
LEFT JOIN messages 
USING(lastseen) 
ORDER BY lastseen desc,(read='no' and to='".$user."') limit 10 

ただし、この機能は一部のユーザーに2回表示されます。

enter image description here

一度だけのユーザーを表示するための正しい方法は何ですか?

+1

http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry

答えて

1

私はこれがあなたが何をしているのかと思います。

SELECT messages.* 
    FROM 
    (SELECT MAX(lastseen) AS lastseen,IF ('Tom' = `from`,`to`,`from`) as otheruser FROM messages 
    WHERE 'Tom' IN (`from`,`to`) GROUP BY otheruser 
    ) 
AS latest INNER JOIN messages ON latest.lastseen = messages.lastseen 
          AND (('Tom' = messages.from AND latest.otheruser = messages.to) 
           OR 
           ('Tom' = messages.to AND latest.otheruser = messages.from)) 
ORDER BY messages.lastseen 
DESC,`read`='no' limit 10 

ただこれは「トム以上にメッセージとして送ら「トム」にメッセージとして送ら最新10人のユーザーを返しますあなたの変数

と「トム」を交換してください。

+0

あなたのコードを試しましたが、まったく同じ結果が得られました。 – user3304007

+0

同じユーザーが何を意味するのですか?それは、ユーザー 'Tom'にメッセージを送ったり、メッセージを送るさまざまな名前を表示することになります。 (time) –

+1

と同じユーザーがいない限り。 –