6

Facebookのように、ログインしたユーザーと彼がチャットしたことのあるユーザーとの間の最後のメッセージを取得する必要があります。これは facebook.com/messages ページのようになります。これが私が今までやってきたことです

データベース

user_table
- cwid
- first_name
- last_name
- user_image_link

message
- id
- cwid1 (送信者 ID)
- cwid2 (受信者 ID)
- message (メッセージの内容) - messagetime
(タイムスタンプ)
- userread (enum 'Y' 'N')`

クエリ にログインしたユーザーの ID は 1 です

SELECT    
user_table.cwid,    
    message.cwid1,   
    message.cwid2,   
    message.message,   
    message.userread,  
    MAX(message.messagetime),   
    user_table.first_name,   
    user_table.last_name,   
    user_table.user_image_link   
    FROM message   
    INNER JOIN user_table   
    ON message.cwid1 = user_table.cwid   
    WHERE (cwid2="1")   
    GROUP BY cwid1   
    ORDER BY messagetime DESC   

これは、ユーザーがメッセージを送信したすべての人から受信した最後のメッセージを返します。同様に、このユーザーが送信したすべてのメッセージも取得する必要があります。

SELECT    
user_table.cwid,   
    message.cwid1,     
    message.cwid2,    
    message.message,   
    message.userread,    
    MAX(message.messagetime),   
    user_table.first_name,    
    user_table.last_name,    
    user_table.user_image_link    
    FROM message    
    INNER JOIN user_table    
    ON message.cwid1 = user_table.cwid   
    WHERE (cwid1="1")    
    GROUP BY cwid2    
    ORDER BY messagetime DESC    

私はそれらの両方を異なるユーザーと混合し、Facebook メッセージのようにメッセージ時間でソートする必要があります。私は MySql の初心者です。どんな助けも大歓迎です。ありがとう!

4

4 に答える 4

1

多分そのようなもの:

SELECT
  DISTINCT m.id, m.cwid1, m.cwid2, m.message, m.userread, m.messagetime,
  u.first_name, u.last_name, u.user_image_link
FROM
  user_table u,
  message m,
  (
    SELECT DISTINCT IF(cwid1 = "1", cwid2, cwid1) AS id
    FROM message
    WHERE "1" IN (cwid1, cwid2)
  ) partner
WHERE
  u.cwid = partner.id
  AND (m.messagetime, m.cwid1, m.cwid2) IN
    (
      SELECT MAX(messagetime), cwid1, cwid2
      FROM message
      WHERE (cwid1, cwid2) IN ((partner.id,"1"),("1",partner.id))
      GROUP BY cwid1, cwid2
    )
ORDER BY m.messagetime DESC

また、集計関数に表示FROMされない句のすべての列は、句に表示される必要があることに注意してください。その場合、MySQL はエラーを発生させませんが、非集計列の値はランダムです。MAX GROUP BY

于 2012-10-25T20:51:10.313 に答える
0

Facebook がメッセージ用の FQL テーブルをどのようにセットアップするかを確認します: https://developers.facebook.com/docs/reference/fql/unified_message。そして、それに基づいてテーブルのアーキテクチャを構築します。

于 2012-12-11T01:05:21.267 に答える