sql:DISTINCT给我重复的结果

时间:2014-09-16 10:54:43

标签: mysql ruby-on-rails activerecord active-relation

您好我正在使用以下查询

 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。

由于

2 个答案:

答案 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循环或其他东西来进一步过滤掉结果。