Mysql 连接表时ActiveRecord计数不同
我正在尝试创建一个ActiveRecord查询,该查询统计特定用户的Mysql 连接表时ActiveRecord计数不同,mysql,ruby-on-rails,ruby,activerecord,Mysql,Ruby On Rails,Ruby,Activerecord,我正在尝试创建一个ActiveRecord查询,该查询统计特定用户的位置=向左移动时的所有事件,当状态为已移动或已移动时加入到状态。我正在努力解决的问题是,对于特定用户,我的事件可能有多条记录具有相同的数据,因为它们是事件,并且您可以多次执行相同的事件 我的两个模型: 活动: belongs_to :user belongs_to :status 地位: belongs_to :user has_many :events 由于有多个用户,我需要为每个特定用户获取上次创建的事件,并加入状态,其
位置=向左移动时的所有事件,当状态
为已移动
或已移动
时加入到状态
。我正在努力解决的问题是,对于特定用户,我的事件可能有多条记录具有相同的数据,因为它们是事件,并且您可以多次执行相同的事件
我的两个模型:
活动:
belongs_to :user
belongs_to :status
地位:
belongs_to :user
has_many :events
由于有多个用户,我需要为每个特定用户获取上次创建的事件
,并加入状态
,其中状态.位置
已移动
或已移动
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">
根据我对给定场景的假设,尝试以下方法:
Event.joins(:user).joins(:status)
.where("statuses.status_now IN ('moved', 'moved_correct') AND events.position = 'move_left')"
.distinct.count("events.id")
这似乎工作不正常。为了澄清这一点,我正在寻找类似的东西:从状态上的事件内部连接状态中选择DISTINCT COUNT(DISTINCT statuses.id)和用户id
活动事件用户id
其中(statuses.status\u now IN('moved'、'moved\u correct')和events.position='move\u left')-但基于上一次唯一的事件的状态计数。用户id
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
Event.joins(:user).joins(:status)
.where("statuses.status_now IN ('moved', 'moved_correct') AND events.position = 'move_left')"
.distinct.count("events.id")