在 SQL 中显示邮件列表

Show Message List in SQL

我想像 facebook messenger 一样显示消息列表,在左上角你可以看到你发出的所有消息。

user_table

user_id
user_firstname
user_latsname

message_table

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

如果有人先给我发消息,我的代码就可以正常工作。 它在我的消息列表中显示有人给我发消息。 但是,当我是第一个发出消息的人时。 它没有显示在我的消息列表中。 在我可以在我的消息列表中看到它之前,他应该在我的消息中回复。 但是我想显示什么时候有人给我发消息,什么时候我是第一个发消息的人。

message_table with sample data

user_table with sample data

result

但是当我在 user_table 中添加新用户并向他发送消息时。它不会显示在我的消息列表中。

我希望我的预期结果是当我向新用户发送消息时它会显示在我的消息列表中

你的行(在 sql 查询中)

message_table.message_to_user_id = '$session'

可能是您看不到自己发送的消息的原因(因为您不是收件人)

要获取您涉及的所有消息,它可能应该是:

message_table.message_to_user_id = '$session' or message_table.message_user_id = '$session'

我希望 $session 不是用户提供的,或者您手头有一些可能的 sql-注入 ;o)

解决方案

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 我是发出第一条消息的人,第二个 select 声明 select 是某人先给我留言然后我联合它。