在用户提交搜索之后,我想显示哪些公司在哪一天进行了相同的搜索。让我解释一下……
我有一个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和搜索日期只得到一条记录。