1

私は2つのSQLテーブルを持っています.1つはユーザーを持ち、もう1つはメッセージを持っています. 今私のクエリは次のとおりです。

SELECT users.memberid,users.username,users.profileimage,users.gender,message.messagebody, message.fromid,message.toid,message.messageid 
FROM message,users 
WHERE message.fromid = users.memberid AND message.toid = '$id' AND recieverdeleted='0' 
ORDER BY datetime DESC LIMIT 55

現在返されているのは、formid(送信者の ID) に関係なく、すべてのメッセージのすべての情報です。問題は、私はすべての送信者 ID の最新のメッセージのみを表示したい..Facebook が最新のメッセージのみを表示する方法のようなものです。その友人 x があなたに送信したメッセージであり、すべてのメッセージではありません。ユーザーが友人の最新のメッセージをクリックした後、すべてのメッセージを表示する作業を行います。ありがとう

4

4 に答える 4

1

さて、あなたは試しました。それは良い。

 SELECT u.memberid
      , u.username
      , u.profileimage
      , u.gender
      , m.messagebody
      , m.fromid
      , m.toid
      , m.messageid 
   FROM users u
   JOIN message m
     ON m.fromid = u.memberid
   JOIN (SELECT fromid,toid,MAX(datetime) max_datetime FROM message GROUP BY fromid,toid) n
     ON n.fromid = m.fromid
    AND n.toid = m.toid
    AND n.max_datetime = m.datetime
  WHERE message.toid = $id 
    AND recieverdeleted = 0 
  ORDER 
     BY datetime DESC LIMIT 55;
于 2013-04-06T11:22:48.913 に答える
0

最初joinは2つのテーブルを適用order byします。現時点では、コマンドはどのテーブルに順序を適用するかがわからないためです。または、2つのテーブルの選択から中間テーブルを作成してから、順序を適用することをお勧めします。何かのようなもの:

SELECT username,messagebody,fromid FROM(
SELECT users.memberid,users.username,users.profileimage,users.gender,message.messagebody, message.fromid,message.toid,message.messageid,message.datetime 
FROM message,users 
WHERE message.fromid = users.memberid AND message.toid = '$id' AND recieverdeleted='0' )INTERMEDIATE_TABLE ORDER BY datetime DESC

ずっと前にSQLコードを実行したので、構文が間違っている可能性がありますが、このような非常によく似たものを試す必要があります。

于 2012-07-01T17:16:21.957 に答える
0

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

SELECT m1.* 
  FROM table_name m1 
  INNER JOIN (SELECT MAX(senddate) AS senddate, 
                     IF(member_id2 = 3, member_id1, member_id2 ) AS user 
                FROM table_name 
               WHERE (member_id1 = 3 AND delete1=0) OR 
                     (member_id2 = 3 AND delete2=0) 
              GROUP BY user) m2 
         ON m1.senddate = m2.senddate AND 
           (m1.member_id1 = m2.user OR m1.member_id2 = m2.user) 
     WHERE (member_id1 = 3 AND delete1=0) OR 
           (member_id2 = 3 AND delete2=0) 
   ORDER BY m1.senddate DESC
于 2013-04-06T10:48:35.503 に答える
-1

これを試して::

   SELECT users.memberid,users.username,users.profileimage,users.gender,message.messagebody, message.fromid,message.toid,message.messageid 

FROM message inner join users on (message.fromid = users.memberid)
where  message.toid = '$id' AND recieverdeleted='0' 
ORDER BY message_datetime DESC limit 1
于 2012-07-01T17:21:49.903 に答える