ATL::CAccessToken accessToken;
ATL::CSid currentUserSid;
if (accessToken.GetProcessToken(TOKEN_READ | TOKEN_QUERY) &&
accessToken.GetUser(¤tUserSid))
return currentUserSid.Sid();
Вы можете получить время последнего разговора между данным пользователем (в моем примере я использую пользователя 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]