我想显示像 facebook messenger 这样的消息列表,在左下角你可以看到你所做的所有消息。
用户表
user_id
user_firstname
user_latsname
消息表
message_id
message_user_id
message_to_user_id
message_content
message_time_stamp
我的 SQL
SELECT user_table.user_id,
CONCAT(user_table.user_firstname,' ',user_table.user_lastname) AS user_fullname,
message_table.message_user_id,
message_table.message_content,
message_table.message_time_stamp
FROM user_table
INNER JOIN message_table
ON user_table.user_id = message_table.message_user_id
WHERE (message_table.message_to_user_id = '$session')
ORDER BY message_table.message_time_stamp DESC
如果有人先给我发消息,我的代码就可以正常工作。它在我的消息列表中显示有人给我发消息。但是当我是第一个发消息的人时。它没有显示在我的消息列表中。他应该先回复我的消息,然后我才能在我的消息列表中看到它。但我想显示何时有人给我发消息,以及我是第一个发消息的人。
但是当我在 user_table 中添加新用户并向他发送消息时。它不会显示在我的消息列表中。
我希望我的预期结果是当我向新用户发送消息时,它将显示在我的消息列表中
解决方案
SELECT user_id, user_fullname, message_content
FROM
(
(SELECT user_table.user_id,
CONCAT(user_table.user_firstname,' ',user_table.user_lastname) AS user_fullname,
message_table.message_user_id,
message_table.message_content,
message_table.message_time_stamp
FROM user_table
INNER JOIN message_table
ON user_table.user_id = message_table.message_to_user_id
WHERE (message_table.message_user_id = '$session')
)ORDER BY message_time_stamp DESC
UNION DISTINCT
(SELECT user_table.user_id,
CONCAT(user_table.user_firstname,' ',user_table.user_lastname) AS user_fullname,
message_table.message_user_id,
message_table.message_content,
message_table.message_time_stamp
FROM user_table
INNER JOIN message_table
ON user_table.user_id = message_table.message_user_id
WHERE (message_table.message_to_user_id = '$session')
)ORDER BY message_time_stamp DESC
) as id GROUP BY user_id ORDER BY message_time_stamp DESC
这是我在我的问题中所做的解决方案。我做了 2 个 select 语句,其中第一个 select 只选择我是发送第一条消息的人,第二个 select 语句选择有人第一次给我发消息的地方。然后我联合它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句