Как сделать вывод только тех пользователей, с которыми уже есть переписка?

Есть таблица (messages) с сообщениями, содержащая следующие столбцы:
msg_id incoming_msg_id outgoing_msg_id msg

Как сделать чтобы в списке пользователей выводились только те пользователи, с которыми уже имеется какая либо переписка? Т.е. сообщение ему или от него

Сейчас просто выводятся все пользователи, которые есть на сайте
$sql = "SELECT * FROM nano_user ORDER BY id DESC";

p.s. nano_user - это таблица, в которой просто хранятся все пользователи, которые есть на сайте
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
Adamos
@Adamos
SELECT * FROM nano_user 
WHERE id IN (SELECT DISTINCT incoming_msg_id FROM messages) 
OR id IN (SELECT DISTINCT outgoing_msg_id FROM messages)
ORDER BY id DESC

Запрос, разумеется, не самый оптимальный.
Но судя по вопросу - и записей там далеко не миллионы, так что в обозримом будущем этот будет работать и не станет "бутылочным горлышком". Особенно если на идентификаторах в таблице messages проставлены индексы (а они, очевидно, должны быть проставлены, поскольку постоянно идет выборка для конкретного пользователя).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
NikFaraday
@NikFaraday
Student full-stack Developer
Если я верно понимаю, incoming_msg_id это id пользователя, который отправил сообщение, а outgoing_msg_id это id пользователя, которому должно прийти сообщение.

Если моя догадка верна, тогда вам, в первую очередь, нужно сделать, что бы в таблице хранились пары id пользователей, при том, что outgoing_msg_id должен иметь возможность принимать значение null.

Далее всё просто, вам нужно всего лишь сделать выборку тех пользователей, id которых != null, т.е. это будет означать, что переписка с ними СУЩЕСТВУЕТ
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы