MySQL частный / групповой запрос обмена сообщениями - получить последние сообщения разговора для пользователя - ОБНОВЛЕНО
Я боролся с (возможно) простым запросом SQL, для которого я не могу найти решение. Частью моего проекта является создание частной / групповой системы входящих / обмена сообщениями, в которой мне в настоящее время необходимо получить все разговоры и их сообщения - для всех разговоров, членом которых в настоящее время является запрашиваемый пользователь.
В настоящее время у меня есть следующая схема базы данных
users:
-------------------
userId int (PRIMARY KEY)
alias varchar(50)
pms:
-------------------
messageId int (PRIMARY KEY)
userId int (FK to users.userId)
message text
conversationId int (FK to pmConversations.conversationId)
timestamp
pmConversations:
-------------------
conversationId int (PRIMARY KEY)
title varchar(64)
timestamp
userId int (FK to users.userId)
pmMemberships:
-------------------
userId int (PK and FK together with conversationId)
conversationId (PK and FK together with userId)
role varchar(16)
Новое редактирование с обновленными - работающими (?) Запросами: в последнее время я пробовал разные вещи, и я пришел к следующим запросам, был бы очень рад, если бы кто-нибудь мог сообщить мне, если они очень плохие (чего я боюсь) они есть) - однако они на работу.
Для получения последнего сообщения + заголовка разговора + пользователя из каждого разговора, членом которого является пользователь, я использовал следующий запрос:
SELECT pmConversations.title convTitle, users.alias lastMsgFrom, pms.message lastMsg, pms.timestamp, pmMemberships.userId gettingForUser
FROM users, pmConversations, pmMemberships, pms
INNER JOIN ( SELECT MAX(pms.timestamp) AS latestPms, conversationId
FROM pms GROUP BY conversationId ) sbq ON pms.timestamp=latestPms
WHERE pmMemberships.conversationId=pmConversations.conversationId
AND pms.conversationId=pmConversations.conversationId
AND pmMemberships.userId=1
AND users.userId=pms.userId;
И для получения всех сообщений от определенного разговора для определенного пользователя я использовал следующее:
SELECT pms.*
FROM pms
INNER JOIN pmMemberships
ON pms.conversationId=pmMemberships.conversationId
WHERE pmMemberships.userId = 2
AND pms.conversationId = 2;
Если бы кто-нибудь намного более опытный, чем я, мог бы дать мне свой вклад в это, я был бы очень благодарен!
С уважением, Экен