您好我正在使用以下查询
Message.select("DISTINCT(commentable_id, user_id) as owner_id").map(&:owner_id)
它给我这样的结果: [“(8,9)”,“(8,84)”,“(9,8)”,“(84,8)”]
这里“(8,9)”和“(9,8)”是不同的返回,但我只想要单个记录。手段 结果应该像
[“(8,9)”,“(8,84)”] 那我怎么能实现呢。
更新
My table:
id | user_id | commentable_id
1 | 8 | 9
2 | 8 | 84
3 | 9 | 8
4 | 84 | 8
5 | 8 | 84
我想要id为1,2的结果。 实际上这是对话视图,所以我是发送者(user_id)或接收者(commentable_id)。 如果我是id为8的用户,那么在我的对话视图中,我将只有两个id为9和84。
由于
答案 0 :(得分:1)
您可以使用greatest()
和least()
函数在SQL中表达您想要的内容:
select distinct least(user_id, commentable_id) as id1, greatest(user_id, commentable_id) as id2
from mytable;
你也应该能够在Ruby on Rails中表达这一点。
答案 1 :(得分:0)
SQL DISTINCT正在为其设计。仅从SQL执行此操作可能太困难了。由于您使用的是Ruby,我建议使用for-in循环或其他东西来进一步过滤掉结果。