我有三个记录对话活动的表和一个包含用户信息的表
我正在尝试将查询汇总在一起,总结用户对话(例如收件箱中最后一条评论可见)
我的表格设置如下
users
---
company | contact_person | pic_small
alerts
---
comment_id | user_id | poster_id | timestamp
activity
---
comment_id | user_id | comment | timestamp
comments
---
comment_id | user_id | comment | timestamp
当用户最初进行联系时,用户的时间戳,comment_id和id(发送人和接收人)将被插入警报表中。 user_id,comment_id,timestamp和实际注释也会插入到活动表中。
然后,一旦对话开始,所有评论(comment_id,user_id,comment,timestamp)都会插入到评论表中。
如上所述,我要做的是总结用户活动,使其看起来像收件箱。
我提出了以下查询,该查询向我提供了登录用户收到或发送的所有会话活动的用户ID,评论ID和用户详细信息。
SELECT alerts.comment_id,
alerts.user_id,
alerts.poster_id,
alerts.timestamp,
users.contact_person,
users.company,
users.pic_small
FROM alerts
LEFT JOIN users ON users.user_id = alerts.user_id
WHERE alerts.user_id = %s
GROUP BY alerts.comment_id
UNION
SELECT alerts.comment_id,
alerts.user_id,
alerts.poster_id,
alerts.timestamp,
users.contact_person,
users.company,
users.pic_small
FROM alerts
LEFT JOIN users ON users.user_id = alerts.poster_id
WHERE alerts.user_id = %s
GROUP BY alerts.comment_id
ORDER BY TIMESTAMP DESC
我坚持的部分是从活动或评论表中获取最后一条评论(最新时间戳评论)(可能是其中之一)。很高兴在需要时完全更改上述查询。
以下是我想要实现的目标,我只想查看联系我的人或我联系过的人的用户详细信息 - 而不是我收件箱中的自己的详细信息(如果需要,我可以使用php执行此操作) - 然而,如果最后一条评论是我的,那也没关系。
答案 0 :(得分:0)
我还不清楚你为什么要使用工会。
您可以通过以下查询获得最新评论,如果您想加入其他user_id的其他结果,那么您可以以相同的方式结合这些结果,或者如果您需要不同的结果,请告诉我。
SELECT
comment_id,comment, user_id,poster_id,TIMESTAMP, contact_person,company,pic_small
FROM
(SELECT
alerts.comment_id,alerts.user_id,alerts.poster_id,alerts.timestamp,users.contact_person,users.company,users.pic_small,act.comment
FROM alerts
JOIN activity act
ON act.comment_id=alerts.comment_id
LEFT JOIN users ON users.user_id = alerts.user_id
WHERE alerts.user_id = %s
ORDER BY act.timestamp DESC) a
GROUP BY comment_id;