Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在SQL中显示消息列表_Php_Mysql_Message - Fatal编程技术网

Php 在SQL中显示消息列表

Php 在SQL中显示消息列表,php,mysql,message,Php,Mysql,Message,我想像FacebookMessenger一样显示消息列表,在左角可以看到您发送的所有消息 用户表 user_id user_firstname user_latsname message_id message_user_id message_to_user_id message_content message_time_stamp 消息表 user_id user_firstname user_latsname message_id message_user_id message_to_u

我想像FacebookMessenger一样显示消息列表,在左角可以看到您发送的所有消息

用户表

user_id
user_firstname
user_latsname
message_id
message_user_id
message_to_user_id
message_content
message_time_stamp
消息表

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_表中添加新用户并向他发送消息时。它不会显示在我的邮件列表中

我希望我的预期结果是当我向新用户发送消息时,它将显示在我的消息列表中(在sql查询中)

这可能是您无法看到自己发送的邮件的原因(因为您不是收件人)

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

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

这是我在问题中提出的解决方案。我做了两个select语句,其中第一个select only select语句选择我是第一个发送消息的人的位置,第二个select语句选择有人第一次向我发送消息的位置。然后我合并它。

向我们展示数据库模式、示例数据、当前和预期输出。请阅读,这里是学习如何提高问题质量和获得更好答案的好地方。没有模式很难说,但可能是
或message\u table.message\u from\u user\u id='user1'
手动查询数据库:
选择message\u user\u id,message\u time\u stamp,message_content from message_table,其中message_user_id=我编辑我的问题,希望有人理解我的问题。示例数据当前和预期输出pleasemy$会话基于用户的用户id。那里有什么不好的地方吗?需要建议如果用户id必须遵守非常严格的计划(特别是不允许使用
字符),您应该可以。