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
此查询将给我一个distinctextra
的结果,其中包含单词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)”)