我有一个包含如下列的messages表
消息\标识、消息\到\标识、消息\来自\标识、消息\正文、项目\标识。
我想要一个特定用户的消息线程列表。消息线程应该具有字段message\ u to\ u id、message\ u from\ u id和project\ u id的唯一组合。
早些时候,我在project\u id上使用了groupby,但我不想让他们在project上使用groupmessage。
SELECT * FROM message
WHERE message_to = '{$user_id}' OR message_from = '{$user_id}'
GROUP BY project
这没有如预期的那样起作用。
SELECT *
FROM message
WHERE message_to = '{$user_id}'
GROUP BY message_from
UNION
SELECT *
FROM message
WHERE message_from = '{$user_id}'
GROUP BY message_to
这是向我显示来自和不想要的消息的组合。
我想要一个单一项目上的每个用户组合的消息线程。
样本数据
message_id | message_from_id | message_to_id | project_id | message _body
1 | 283 | 284 | 4 | Hello
2 | 284 | 283 | 4 | Hi
3 | 285 | 283 | 4 | Hey there!
4 | 283 | 285 | 4 | Greetings
5 | 283 | 284 | 6 | Cool!
我想要什么
message_id | message_from_id | message_to_id | project_id | message _body
1 | 283 | 284 | 4 | Hello
3 | 285 | 283 | 4 | Hey there!
5 | 283 | 284 | 6 | Cool!
i、 e忽略消息\u from \u id和消息\u to \u id顺序,但与项目\u id一起,它们应该是唯一的。
2条答案
按热度按时间hfwmuf9z1#
正确的答案是忽略message\ u to和message\ u from的组合,并给出相同的区别。
这样它就可以在没有groupby子句的情况下工作。
但是这个解决方案的问题是,我不能得到任何像sent\u at这样的非独立列(我在这里没有提到)。
uxh89sit2#
我用一个
ON
或排名方法(ROW_NUMBER
或者DENSE_RANK
)虽然这与所有的sql版本都不兼容,但环顾四周,我发现JOIN
似乎能完成任务的方法。以下是我的结果:
请看这里的小提琴:http://sqlfiddle.com/#!9/ef36a1/32号