Mysql 使用activerecord ruby进行计数

Mysql 使用activerecord ruby进行计数,mysql,ruby-on-rails,ruby,activerecord,Mysql,Ruby On Rails,Ruby,Activerecord,表Visit包含列extra,该列以user:xxx login:yyy(字符串类型)的方式写入 我想确定不同密码的所有数量(在单词登录之后)。我在控制器中编写了这个ActiveRecord查询 Visit.select(:extra).where('extra LIKE ?', "%login%").distinct.count 此查询将给我一个distinctextra的结果,其中包含单词login而不是密码(yyy)。我想做同样的事情,但是要对单词login之后的所有字符串(密码)执行同

Visit
包含列
extra
,该列以
user:xxx login:yyy
(字符串类型)的方式写入

我想确定不同密码的所有数量(在单词
登录之后
)。我在控制器中编写了这个ActiveRecord查询

Visit.select(:extra).where('extra LIKE ?', "%login%").distinct.count
此查询将给我一个distinct
extra
的结果,其中包含单词
login
而不是密码(
yyy
)。我想做同样的事情,但是要对单词
login
之后的所有字符串(密码)执行同样的操作

有什么解决办法吗?任何帮助都将不胜感激。

您可以使用MySQL来实现这一点

Visit.select("SUBSTRING_INDEX(extra, ':', -1)").where('extra LIKE ?', "%login%").distinct.count

谢谢,但这给了我一个错误的结果。例如,如果
用户:xxx登录:yyy
用户:xxx登录:zzz
,即使密码不同,结果也将始终为1而不是2!这是一个想法,但您必须在
子字符串索引(额外的“:”,1)
中通过
-1
更改
1
,以获得正确答案(仅提取密码,因为1作为结果提供
用户
)。谢谢你的帮助@媒体-谢谢!忘记了用户也在那里。我只考虑了
login
。相同结果的另一种语法:
Visit.where('extra LIKE?',“%login%”)。distinct.count(“SUBSTRING_INDEX(extra,,:,-1)”)