Показать список сообщений в SQL - PullRequest
0 голосов
/ 02 декабря 2018

Я хочу показать список сообщений, как в 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 с образцами данных

user_table с образцамиданные

результат

Но когда я добавляю нового пользователя в user_table и сообщаю ему.оно не будет отображаться в моем списке сообщений.

Я хочу получить ожидаемый результат, когда я сообщаю новому пользователю, что оно будет отображаться в моем списке сообщений

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

РЕШЕНИЕ

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 оператора выбора, где первый выбор только выбирает, где я тот, кто делает первое сообщение, а второй оператор выбора выбирает, где кто-то первым сообщает мне.И тогда я объединяю это.

0 голосов
/ 02 декабря 2018

ваша строка (в запросе 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...