【问题标题】:Count distinct with activerecord ruby使用 activerecord ruby​​ 计数不同
【发布时间】:2017-07-12 12:21:52
【问题描述】:

Visit 包含列extra,它是这样写的user:xxx login:yyy(字符串类型)。

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

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

这个查询会给我一个不同的extra 的结果,其中包含单词login 而不是密码(在这个例子中是yyy)。我想做同样的事情,但对于单词 login 之后的所有字符串(密码)。

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

【问题讨论】:

    标签: mysql ruby-on-rails ruby activerecord


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,但它给了我错误的结果。例如user:xxx login:yyyuser:xxx login:zzz,即使密码不同,结果也总是1而不是2!
    • 这是一个想法,但您必须在 SUBSTRING_INDEX(extra, ':', 1) 中将 1 更改为 -1 才能获得正确答案(仅提取密码,因为结果为 1 user)。感谢您的帮助!
    • @media - 谢谢!没想到用户也在那里。我只考虑过login
    • 相同结果的另一种语法:Visit.where('extra LIKE ?', "%login%").distinct.count("SUBSTRING_INDEX(extra, ':', -1)")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 2016-05-26
    相关资源
    最近更新 更多