我有3個MySQL表,即chat_comments,chat_friends和user_details,我想顯示一個朋友列表。聊天應用程序的朋友列表
我的表:
chat_comments(comment_id,comment,user_id,user_id2,date_added)
chat_friends(user_id,user_id2,approved)
user_details(user_id, mainimage_id, fullname)
要做到這一點,我需要一個查詢將返回所需的字段(u.mainimage_id
,u.fullname
,b.comment
,b.user_id
),所以我可以遍歷列表中顯示的表。
SQL至今(從@Andriy中號幫助):
SELECT
cc.comment,
cc.date_added,
u.fullname,
u.mainimage_id
FROM
user_details u
LEFT JOIN
chat_comments cc
INNER JOIN (
SELECT
user_id,
MAX(comment_id) AS maxcomment
FROM chat_comments WHERE user_id=2020 OR user_id2=2020
GROUP BY user_id
) a ON a.user_id = cc.user_id
AND a.maxcomment = cc.comment_id
ON a.user_id = u.user_id
WHERE u.user_id IN (
SELECT user_id2
FROM chat_friends
WHERE user_id = 2020
AND approved = 1
)
上述查詢返回上次登錄的用戶之間的談話登錄用戶的朋友不是最後的評論提出的意見他/她的朋友,不管是誰做的。
我希望它能夠單獨返回登錄用戶和他們的朋友之間的最後一條評論,而不管是誰做的。在chat_messages
表中,user_id
是發送方,而user_id2
是接收方。希望它是有道理的?
您是否嘗試過使用LEFT JOIN可言,而不是INNER? – imm 2012-08-07 05:03:53
我很抱歉,但似乎還有一個不確定性(或者,也許由於您的編輯而出現)。當你在你的評論中提到它時,我已經理解了你,所以你想要*朋友*的最後一條消息*到登錄的用戶。現在從編輯後的問題中可以看出,你想要在相應的對話*中留下最後的消息*,即不管它是由用戶還是由朋友。那實際上是哪個? (在你的問題中,重複了'*'這個短語,'不管是誰做出來的',這會改變我的意思。你可能錯誤地複製粘貼了它嗎?) – 2012-08-08 05:03:36