在sql中显示消息列表

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

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

  1. user_id
  2. user_firstname
  3. user_latsname

消息表

  1. message_id
  2. message_user_id
  3. message_to_user_id
  4. message_content
  5. message_time_stamp

我的sql

  1. SELECT user_table.user_id,
  2. CONCAT(user_table.user_firstname,' ',user_table.user_lastname) AS user_fullname,
  3. message_table.message_user_id,
  4. message_table.message_content,
  5. message_table.message_time_stamp
  6. FROM user_table
  7. INNER JOIN message_table
  8. ON user_table.user_id = message_table.message_user_id
  9. WHERE (message_table.message_to_user_id = '$session')
  10. ORDER BY message_table.message_time_stamp DESC

如果有人先给我发信息,我的代码就可以正常工作。在我的信息列表中显示有人给我发信息。但当我是第一个传达信息的人。它不显示在我的邮件列表中。他应该先回复我的信息,然后我才能在信息列表中看到它。但我想告诉你什么时候有人给我发信息,什么时候我是第一个发信息的人。
带有示例数据的消息表
带有示例数据的用户表
结果
但当我在user\表中添加新用户并向他发送消息时。它不会显示在我的邮件列表中。
我希望我的预期结果是,当我的消息新用户将显示在我的消息列表

2admgd59

2admgd591#

您的行(在sql查询中)

  1. message_table.message_to_user_id = '$session'

这可能就是为什么你看不到自己发送的邮件的原因(因为你不是收件人)
要获取您参与的所有消息,它可能应该是:

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

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

nwsw7zdq

nwsw7zdq2#

解决方案

  1. SELECT user_id, user_fullname, message_content
  2. FROM
  3. (
  4. (SELECT user_table.user_id,
  5. CONCAT(user_table.user_firstname,' ',user_table.user_lastname) AS user_fullname,
  6. message_table.message_user_id,
  7. message_table.message_content,
  8. message_table.message_time_stamp
  9. FROM user_table
  10. INNER JOIN message_table
  11. ON user_table.user_id = message_table.message_to_user_id
  12. WHERE (message_table.message_user_id = '$session')
  13. )ORDER BY message_time_stamp DESC
  14. UNION DISTINCT
  15. (SELECT user_table.user_id,
  16. CONCAT(user_table.user_firstname,' ',user_table.user_lastname) AS user_fullname,
  17. message_table.message_user_id,
  18. message_table.message_content,
  19. message_table.message_time_stamp
  20. FROM user_table
  21. INNER JOIN message_table
  22. ON user_table.user_id = message_table.message_user_id
  23. WHERE (message_table.message_to_user_id = '$session')
  24. )ORDER BY message_time_stamp DESC
  25. ) as id GROUP BY user_id ORDER BY message_time_stamp DESC

这是我解决问题的方法。我做了2个select语句,其中第一个select只选择我在哪里发第一条消息,第二个select语句选择某人在哪里给我发第一条消息。然后我把它结合起来。

展开查看全部

相关问题