Я знаю, что подобные вопросы задавали раньше, но ни один из них не имел таких же условий, и их ответы не работали для этого случая.Получить последнее сообщение от каждого разговора
Таблица, содержащая сообщения выглядит следующим образом:
id | owner_id | recipient_id | content | created
1 | 1 | 2 | Hello | 2015-12-08 20:00
2 | 2 | 1 | Hey | 2015-12-08 20:10
3 | 3 | 1 | You there? | 2015-12-08 21:00
4 | 1 | 3 | Yes | 2015-12-08 21:15
5 | 4 | 1 | Hey buddy | 2015-12-08 22:00
И скажем, я запрашиваю разговоры для пользователя ID 1, ожидаемый результат:
id | owner_id | recipient_id | content | created
5 | 4 | 1 | Hey buddy | 2015-12-08 22:00
4 | 1 | 3 | Yes | 2015-12-08 21:15
2 | 2 | 1 | Hey | 2015-12-08 20:10
Я пробовал много комбинаций, используя JOINs и подзапросы, но ни один из них не дал ожидаемых результатов.
Я ищу ответ в MySQL, но это будет использоваться в проекте, разработанном под CakePHP 2, поэтому, если есть конкретный способ сделать торт, это будет здорово.
Вот один из вопросов, которые я пробовал, но он не работает. Я считаю, что даже близко не к тому, что мне нужно.
SELECT
IF (owner_id = 1, recipient_id, owner_id) AS Recipient,
(
SELECT
content
FROM
messages
WHERE
(owner_id = 1 AND recipient_id = Recipient )
OR
(owner_id = Recipient AND recipient_id = 1)
ORDER BY
created DESC
LIMIT 1
)
FROM
messages
WHERE
owner_id = 1
OR
recipient_id = 1
GROUP BY
Recipient;
Есть ли уникальный ключ в вашем столе? – Timekiller
Да, я обновил вопрос (неправильно использовал несколько идентификаторов). – Camilo
Не могли бы вы включить SQL-запросы, которые вы пробовали в своем вопросе? – summea