0
当我试图创建一个ActiveRecord查询计数统计不同所有events
其中position = move_left
为特定的用户,加入到statuses
当status
要么moved
或moved_correct
。我遇到的问题是我的events
可能有多个记录,并且具有相同数据的特定用户,因为它们是事件,并且您可以多次执行相同的事件。ActiveRecord的连接表
我的两个型号:
事件:
belongs_to :user
belongs_to :status
状态:
belongs_to :user
has_many :events
由于有多个用户,我需要为每个特定用户最后创建event
,并加入到statuses
其中statuses.position
是moved
或moved_correct
。
SELECT `events`.* FROM `events` ORDER BY `events`.`id` DESC
=> <Event id: 1, user_id: 1, position: "move_left">
=> <Event id: 2, user_id: 1, position: "right">
=> <Event id: 3, user_id: 1, position: "move_left">
=> <Event id: 4, user_id: 2, position: "move_left">
=> <Event id: 5, user_id: 2, position: "right">
=> <Event id: 6, user_id: 3, position: "right">
..
SELECT `statuses`.* FROM `statuses` ORDER BY `statuses`.`id` DESC
=> <Status id: 1, status_now: "moved", user_id: 1>
=> <Status id: 2, status_now: "moved_correct", user_id: 1>
=> <Status id: 3, status_now: "moved", user_id: 2>
=> <Status id: 4, status_now: "moved_correct", user_id: 3>
=> <Status id: 5, status_now: "moved_down", user_id: 3>
随着样本数据,我希望看到的总数将是4(user_id: 1
返回2,user_id: 2
返回1,user_id: 3
1返回)
这是我如何描绘它的一个示例查询,但我不确定哪里出错。任何帮助将不胜感激!
Event.select(:user_id).distinct.order(id: :desc).first.joins("JOIN statuses ON events.user_id = statuses.user_id AND
statuses.status_now IN ('moved', 'moved_correct')").count
这似乎并没有正常工作。为了澄清我正在寻找更多的东西:SELECT DISTINCT COUNT(DISTINCT statuses.id)FROM'events' INNER JOIN'statuses' ON'statuses'.'user_id' ='activity_events'.'user_id' WHERE(statuses.status_now IN('moved','moved_correct')AND events.position ='move_left') - 但是基于最后一个唯一的'events.user_id'来计算'statuses'数量 –