我知道以前也有类似的问题,但没有一个具有相同的条件,他们的答案对这种情况不起作用。从每次对话中获取最后一条消息
包含的消息的表看起来像这样:
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
我试过很多的组合使用,联合和子查询,但没有一个给出了预期的结果。
我正在寻找MySQL中的答案,但是这将用于CakePHP 2开发的项目中,所以如果有一个Cake特定的方法来做到这一点,那就太棒了。
这是我尝试过的一个查询,但它不工作。我相信甚至没有接近我所需要的。
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
是的,我更新了这个问题(拼错了几个ID)。 – Camilo
您是否可以包含您在问题中尝试过的SQL查询? – summea