Нужны уникальные данные из таблицы MySQL, связанные с сообщением чата с помощью запроса - PullRequest
0 голосов
/ 26 апреля 2018

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

id  sent_by    message  read    received_by created_at          updated_at
786 6           Hi      0       1           2018-04-26 13:00:15 2018-04-26 13:00:15
774 211         Hello   1       6           2018-04-26 12:20:25 2018-04-26 12:59:59
772 1           hi      1       6           2018-04-26 12:19:28 2018-04-26 13:00:14

Эти данные пришли ко мне в результате запроса ниже:

SELECT *
      FROM `enrich_chat_message` 
      WHERE id IN (SELECT MAX(id) AS id
      FROM `enrich_chat_message`  
      WHERE received_by=6 OR sent_by=6
             GROUP BY sent_by) 
ORDER BY created_at DESC

Но я хочу иметь такие записи

id  sent_by    message  read    received_by     chat_with       created_at          updated_at
786 6           Hi      0       1               1           2018-04-26 13:00:15 2018-04-26 13:00:15
774 211         Hello   1       6               211         2018-04-26 12:20:25 2018-04-26 12:59:59

Здесь в выше желаемого результата я добавил новый столбец chat_with уникальный столбец, который показывает уникальное значение из sent_by и received_by. «6» - это мое собственное имя пользователя, с которого пользователь вошел в систему.

Итак, я хочу использовать это для отображения всех чатов в порядке чата DESC. И я не хочу, чтобы данные повторялись здесь. Как 1 не должно повторяться в chat_with.

Ищу любые предложения по улучшению запроса.

Спасибо! (заранее)

1 Ответ

0 голосов
/ 26 апреля 2018

Я думаю, это то, что вы хотите:

SELECT emc.*, 
       (CASE WHEN emc.received_by = 6 THEN emc.sent_by ELSE emc.received_by END) as chat_with
FROM `enrich_chat_message` emc
WHERE emc.id IN (SELECT MAX(emc2.id) AS id
                 FROM `enrich_chat_message` emc2 
                 WHERE 6 IN (emc2.received_by, emc2.sent_by)
                 GROUP BY (CASE WHEN emc2.received_by = 6 THEN emc2.sent_by ELSE emc2.received_by END)
                )
ORDER BY emc.created_at DESC;

Цель выражения CASE - получить другого пользователя.

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