Rails:使用两列返回唯一结果



在用户提交搜索之后,我想显示哪些公司在哪一天进行了相同的搜索。让我解释一下……

我有一个searches表,如下所示:

id   user_id   date          query
1    1         01-01-2015    A457263
2    1         01-01-2015    A457263
3    2         01-01-2015    A457263
4    3         01-01-2015    A457263
5    3         02-01-2015    A457263

users属于一个公司:

id   company_id
1    1
2    1
3    2
id   name
1    Company One
2    Company Two

现在我要做的是选择针对特定查询A457263的所有搜索。我猜是:

query = params[:query]
@history = Search.where("query = ?", query)

然后过滤掉同一公司用户在同一天的重复搜索。

所以最终的结果是这样的:

id    user_id    date         query
1     1          01-01-2015   A457263
4     3          01-01-2015   A457263
5     3          02-01-2015   A457263

我一直在摆弄uniq方法,但这次我无法绕过它。

应该这样做:

@history = Search.joins(:users).where("searches.query = ?", query).uniq.group("users.company_id, searches.date")

您需要根据公司id和搜索日期进行分组。

@history = Search.includes(:user).where("searches.query = ?", query).group("users.company_id, searches.date")

includes允许您访问用户表,它允许您根据公司ID进行分组。group确保每个公司id和搜索日期只得到一条记录。

最新更新