在sql中显示消息列表

3okqufwl  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(820)

我想显示的消息列表像facebook信使在左角,你可以看到所有的消息你。
用户表

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\表中添加新用户并向他发送消息时。它不会显示在我的邮件列表中。
我希望我的预期结果是,当我的消息新用户将显示在我的消息列表

2admgd59

2admgd591#

您的行(在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)

nwsw7zdq

nwsw7zdq2#

解决方案

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语句选择某人在哪里给我发第一条消息。然后我把它结合起来。

相关问题