chat_comments、chat_friends、user_details という 3 つの MySQL テーブルがあり、フレンド リストを表示したいと考えています。
私のテーブル:
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 Mの助け):
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
は受信者です。それが理にかなっていると思いますか?