MySQL запрос, чтобы получить всех друзей пользователя, включая последнее отправленное сообщение между ними - PullRequest
0 голосов
/ 08 июня 2019

У меня есть 3 таблицы:

os_users (имя пользователя, user_id), os_friends (user_id, target_id, lastaction, time), os_messages (user_id, target_id, message, time).

Iтеперь хочу получить всех «друзей» пользователя, включая последнее 1 сообщение, которое было написано между ними.

Этот запрос работает нормально, чтобы получить всех друзей и их имена пользователей, упорядоченные по методу между ними (24 для тестовых целей, это мой user_id):

SELECT os_friends.*, os_users.username, os_users.user_id AS friend_id 
FROM os_friends 
LEFT JOIN os_users ON os_friends.user_id = os_users.user_id OR os_friends.target_id = os_users.user_id

WHERE os_users.user_id != 24 AND (os_friends.user_id = 24 OR os_friends.target_id = 24) 
ORDER BY os_friends.lastaction DESC

Я хотел бы получить последнее сообщение (неважно, кто из 2 человек отправил его) об этой "дружбе" тоже в результатахЛучше всего будет "КАК последнее сообщение".

Надеюсь, вы поможете мне!

1 Ответ

0 голосов
/ 08 июня 2019

Предположим, что (user_id, target_id, time) уникален в таблице os_messages

Select * from os_users osu 
left join os_friends osf on osu.user_id = osf.user_id
left join os_messages osm on osm.user_id = osf.user_id and osm.target_id = osf.target_id
where not exists (
  Select * from os_messages osm1 where osm1.user_id = osm.user_id and osm1.target_id = osm.target_id and osm1.time > osm.time
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...