У меня есть SQL-запрос, который выбирает пользователей из моей таблицы пользователей, которые отправили сообщение или получили сообщение от моего выбранного пользователя (идентификатор отправителя или получатель в таблице сообщений).
Запрос такой:
SELECT *
FROM users
WHERE (ID IN (SELECT DISTINCT(senderID)
FROM messages
WHERE recipientID = $userID)
OR ID IN (SELECT DISTINCT(recipientID)
FROM messages
WHERE senderID = $userID))
Учитывая, что столбец sentAt является меткой времени сообщения, как я могу заказать возврат в том порядке, в котором пользователь отправил самое последнее сообщение. Я попытался добавить ORDER BY sentAt DESC к подзапросам, но он не дал ожидаемого результата.
Любая помощь будет принята с благодарностью.
Пожалуйста, предоставьте образцы данных и желаемые результаты.
Извините, я отредактировал теги, чтобы отразить, что это mysql.






Кажется, вам нужен join вместо in:
select u.*
from users u join
messages m
on u.id in (m.senderid, m.recipientid)
where u.id = $userid
order by m.sentat desc
Я искал JOIN, ваш ответ немного отличался от того, что мне было нужно, поскольку он вернул только пользователя, которого я искал, сообщения, связанные, но с некоторыми небольшими настройками он работал отлично. Если кому-то интересно, мой окончательный код выглядел следующим образом: SELECT * FROM users AS u INNER JOIN messages AS m ON u.ID IN (m.senderID, m.recipientID) WHERE u.ID <> $userID GROUP BY u.ID ORDER BY m.sentAt DESC
Для какой СУБД это нужно? Добавьте тег, чтобы указать, используете ли вы
mysql,postgresql,sql-server,oracleилиdb2- или что-то еще.