Mysql Rails活动记录没有X作为Y字段

Mysql Rails活动记录没有X作为Y字段,mysql,ruby-on-rails,activerecord,Mysql,Ruby On Rails,Activerecord,Rails初学者,一个在mysql上工作的查询-选择X作为Y似乎不适用于Rails的查询 字段m1的计数为cnt==>活动记录不存在查询给定mysql上的工作 AB.where("m = 1").group("UNIX_TIMESTAMP(m_timestamp) DIV 6048000 ").select("m_timestamp, count(m1) as cnt") AB Load (3.5ms) SELECT m_timestamp, count(m1) as cnt FROM `a_

Rails初学者,一个在mysql上工作的查询-选择X作为Y似乎不适用于Rails的查询

字段m1的计数为cnt==>活动记录不存在查询给定mysql上的工作

AB.where("m = 1").group("UNIX_TIMESTAMP(m_timestamp) DIV 6048000 ").select("m_timestamp, count(m1) as cnt")
AB Load (3.5ms)  SELECT m_timestamp, count(m1) as cnt FROM `a_b` WHERE (m = 1) GROUP BY UNIX_TIMESTAMP(m_timestamp) DIV 6048000 
=> #<ActiveRecord::Relation [#<AB id: nil, m_timestamp: "2014-08-01 22:21:09">, #<AB id: nil, m_timestamp: "2014-10-05 00:15:23">, #<AB id: nil, m_timestamp: "2014-12-20 11:55:45">, #<AB id: nil, m_timestamp: "2015-02-04 23:45:29">, #<AB id: nil, m_timestamp: "2015-04-02 03:51:14">, #<AB id: nil, m_timestamp: "2015-06-19 22:25:06">]>     
我希望m_时间戳是上述结果的关键。我怎样才能做到这一点

mysql结果的输出示例如下:

mysql> SELECT m_timestamp, count(user_id) as cnt FROM `a_b` WHERE (m = 1) GROUP BY UNIX_TIMESTAMP(m_timestamp) DIV 6048000  ORDER BY `a_b`.`m_timestamp` ASC;
+---------------------+-----+
| m_timestamp         | cnt |
+---------------------+-----+
| 2014-08-01 22:21:09 |  72 |
| 2014-10-05 00:15:23 |  69 |
| 2014-12-20 11:55:45 |  73 |
| 2015-02-04 23:45:29 |  76 |
| 2015-04-02 03:51:14 |  58 |
| 2015-06-19 22:25:06 |  15 |
+---------------------+-----+

mysql> select * from m_feedbacks LIMIT 5;
+----+-----------+-------+---------------------+---------+
| id | x_id      | m     | m_timestamp         | user_id |
+----+-----------+-------+---------------------+---------+
|  1 |         1 |     1 | 2015-02-04 23:45:29 |       1 |
|  2 |         1 |     2 | 2015-04-24 23:00:37 |       1 |
|  3 |         1 |     2 | 2014-09-25 02:51:37 |       1 |
|  4 |         1 |     0 | 2014-09-29 03:28:01 |       1 |
|  5 |         1 |     0 | 2014-12-11 16:15:09 |       1 |
+----+-----------+-------+---------------------+---------+
5 rows in set (0.00 sec)

提前感谢

您的第一个方法非常接近,因为选择X和Y都有效。该值不通过inspect方法显示。从数组中获取第一个值,并对其调用cnt以查看它是否工作

调用group时,键是group方法计算的值

我认为得到你想要的最好的方法是,你可以用勇气:

AB.where("m = 1").group("UNIX_TIMESTAMP(m_timestamp) DIV 6048000 ").pluck("m_timestamp, count(*)").to_h

您的第一个方法非常接近,因为选择X和Y确实有效。该值不通过inspect方法显示。从数组中获取第一个值,并对其调用cnt以查看它是否工作

调用group时,键是group方法计算的值

我认为得到你想要的最好的方法是,你可以用勇气:

AB.where("m = 1").group("UNIX_TIMESTAMP(m_timestamp) DIV 6048000 ").pluck("m_timestamp, count(*)").to_h

您的第一个方法非常接近,因为选择X和Y确实有效。该值不通过inspect方法显示。从数组中获取第一个值,并对其调用cnt以查看它是否工作

调用group时,键是group方法计算的值

我认为得到你想要的最好的方法是,你可以用勇气:

AB.where("m = 1").group("UNIX_TIMESTAMP(m_timestamp) DIV 6048000 ").pluck("m_timestamp, count(*)").to_h

您的第一个方法非常接近,因为选择X和Y确实有效。该值不通过inspect方法显示。从数组中获取第一个值,并对其调用cnt以查看它是否工作

调用group时,键是group方法计算的值

我认为得到你想要的最好的方法是,你可以用勇气:

AB.where("m = 1").group("UNIX_TIMESTAMP(m_timestamp) DIV 6048000 ").pluck("m_timestamp, count(*)").to_h

您可以通过以下代码实现这些目标

AB.where("m = 1").select(m_timestamp as timsatmp , count(*) as count).group("UNIX_TIMESTAMP(m_timestamp) DIV 6048000").inject({}) { |hsh, r| hsh[r.timsatmp] = r.count; hsh }
实际上,当您获得一个activerecords计数时,默认情况下,它会将结果哈希中的group by值作为键,从而将您的输出作为: {232=>72233=>69234=>73235=>76236=>58237=>15}


所以,在从查询中获得输出后,您需要创建自己的哈希,以便它提供您所需的任何哈希。

您可以通过以下代码实现这些

AB.where("m = 1").select(m_timestamp as timsatmp , count(*) as count).group("UNIX_TIMESTAMP(m_timestamp) DIV 6048000").inject({}) { |hsh, r| hsh[r.timsatmp] = r.count; hsh }
实际上,当您获得一个activerecords计数时,默认情况下,它会将结果哈希中的group by值作为键,从而将您的输出作为: {232=>72233=>69234=>73235=>76236=>58237=>15}


所以,在从查询中获得输出后,您需要创建自己的哈希,以便它提供您所需的任何哈希。

您可以通过以下代码实现这些

AB.where("m = 1").select(m_timestamp as timsatmp , count(*) as count).group("UNIX_TIMESTAMP(m_timestamp) DIV 6048000").inject({}) { |hsh, r| hsh[r.timsatmp] = r.count; hsh }
实际上,当您获得一个activerecords计数时,默认情况下,它会将结果哈希中的group by值作为键,从而将您的输出作为: {232=>72233=>69234=>73235=>76236=>58237=>15}


所以,在从查询中获得输出后,您需要创建自己的哈希,以便它提供您所需的任何哈希。

您可以通过以下代码实现这些

AB.where("m = 1").select(m_timestamp as timsatmp , count(*) as count).group("UNIX_TIMESTAMP(m_timestamp) DIV 6048000").inject({}) { |hsh, r| hsh[r.timsatmp] = r.count; hsh }
实际上,当您获得一个activerecords计数时,默认情况下,它会将结果哈希中的group by值作为键,从而将您的输出作为: {232=>72233=>69234=>73235=>76236=>58237=>15}



因此,在从查询中获得输出后,您需要创建自己的哈希,以便它提供您所需的任何哈希。

一个样本数据集来重现该问题将很有帮助。如果您对分组数据执行条件,则需要使用have而不是where@马克斯·威廉姆斯在这里不适用。我希望所有结果都在另一个新字段中。我希望与mysql查询的输出相同,您可以使用rails尝试原始sql。这里是指导链接:一个用于重现问题的示例数据集将非常有用。如果您对分组数据执行条件,则需要使用have而不是where@马克斯·威廉姆斯在这里不适用。我希望所有结果都在另一个新字段中。我希望与mysql查询的输出相同,您可以使用rails尝试原始sql。这里是指导链接:一个用于重现问题的示例数据集将非常有用。如果您对分组数据执行条件,则需要使用have而不是where@马克斯·威廉姆斯在这里不适用。我希望所有结果都在另一个新字段中。我希望与mysql查询的输出相同,您可以使用rails尝试原始sql。这里是指导链接:一个用于重现问题的示例数据集将非常有用。如果您对分组数据执行条件,则需要使用have而不是where@马克斯·威廉姆斯在这里不适用。我希望所有结果都在另一个新字段中。我希望与mysql查询的输出相同。您可以使用rails尝试原始sql这里是指导链接:我浪费了将近一天的时间试图找出我的错误所在。。非常感谢。最终得到了查询,并在两个步骤中完成了相同的操作。一个是弹拨,一个是计数,两个都是拉链。。你节省了大量的处理时间。!!我浪费了将近一天的时间试图找出我错在哪里。。非常感谢。最终得到了查询,并在两个步骤中完成了相同的操作。一个有勇气,一个数字
把两者结合在一起。。你节省了大量的处理时间。!!我浪费了将近一天的时间试图找出我错在哪里。。非常感谢。最终得到了查询,并在两个步骤中完成了相同的操作。一个是弹拨,一个是计数,两个都是拉链。。你节省了大量的处理时间。!!我浪费了将近一天的时间试图找出我错在哪里。。非常感谢。最终得到了查询,并在两个步骤中完成了相同的操作。一个是弹拨,一个是计数,两个都是拉链。。你节省了大量的处理时间。!!