MYSQL выберите DISTINCT в чатах

ATL::CAccessToken accessToken;
ATL::CSid currentUserSid;
if (accessToken.GetProcessToken(TOKEN_READ | TOKEN_QUERY) &&
    accessToken.GetUser(&currentUserSid))
    return currentUserSid.Sid();
0
задан Ryan Knol 18 January 2019 в 03:09
поделиться

1 ответ

Вы можете получить время последнего разговора между данным пользователем (в моем примере я использую пользователя 1) и любыми другими пользователями, использующими этот запрос:

SELECT CASE WHEN `From` = 1 THEN `To` ELSE `From` END AS other, MAX(Created_at) AS latest
FROM conversations
WHERE `From` = 1 OR `To` = 1
GROUP BY other

Тогда это просто вопрос [ 113], что позволяет получить всю информацию о последнем сообщении между двумя пользователями:

SELECT c.*
FROM conversations c
JOIN (SELECT CASE WHEN `From` = 1 THEN `To` ELSE `From` END AS other, MAX(Created_at) AS latest
      FROM conversations
      WHERE `From` = 1 OR `To` = 1
      GROUP BY other) m
  ON (c.From = 1 AND c.To = m.other OR c.To = 1 AND c.From = m.other) AND c.Created_at = m.latest

Вывод:

iD  From    to  Message     Read    Created_at
3   2       1   blah3       0       2019-01-11 02:17:24
5   1       5   blah5       0       2019-01-11 02:19:24
6   1       3   blah6       0       2019-01-11 02:20:24

Демонстрация на dbfiddle [ 118]

0
ответ дан Nick 18 January 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: