0

您好我正在使用以下查询

 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 的用户。

谢谢

4

2 回答 2

1

greatest()您可以使用andleast()函数在 SQL 中表达您想要的内容:

select distinct least(user_id, commentable_id) as id1, greatest(user_id, commentable_id) as id2
from mytable;

您也应该能够在 Ruby on Rails 中表达这一点。

于 2014-09-16T11:22:19.100 回答
0

SQL DISTINCT 正在按照它的设计目的工作。仅从 SQL 执行此操作可能太困难了。由于您使用的是 Ruby,我建议使用 for-in 循环或其他方法来进一步过滤结果。

于 2014-09-16T11:09:58.410 回答