Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 连接表时ActiveRecord计数不同_Mysql_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Mysql 连接表时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 由于有多个用户,我需要为每个特定用户获取上次创建的事件,并加入状态,其

我正在尝试创建一个ActiveRecord查询,该查询统计特定用户的
位置=向左移动
时的所有
事件,当
状态
已移动
已移动
时加入到
状态
。我正在努力解决的问题是,对于特定用户,我的
事件可能有多条记录具有相同的数据,因为它们是事件,并且您可以多次执行相同的事件

我的两个模型:

活动:

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")