【问题标题】:How to get a list (of IDs) of grouped records using Rails+MySQL?如何使用 Rails+MySQL 获取分组记录的列表(ID)?
【发布时间】:2014-12-18 21:55:25
【问题描述】:

我可以用这样的分组记录数对记录进行分组:

@cars = Car.group(:manufacturer).select("id, manufacturer, COUNT(id) AS total_count)

输出会是这样的;

Porsche - 5
Renault - 3
Mercedes - 1
Audi - 2

我现在正试图弄清楚如何获取分组记录(他们的 ID)的列表 - 就像保时捷一样,我想知道 5 辆分组的汽车(他们的 ID)。有什么方法可以做到——最好是使用 MySQL(在select 段落中)?

【问题讨论】:

    标签: mysql ruby-on-rails ruby activerecord group-concat


    【解决方案1】:

    一种方法是使用GROUP_CONCAT,引用文档,“返回一个字符串结果,其中包含来自组的串联非NULL 值。”它会是这样的:

    @cars = Car.group(:manufacturer)
              .select("id, manufacturer, COUNT(id) AS total_count, GROUP_CONCAT(id) AS car_ids")
    
    @cars.first.car_ids # => "1,2,5,9"
    @cars.first.car_ids.split(',') # => [ "1", "2", "5", "9" ]
    

    不过,我应该提醒一下,将 manufacturer 作为 Car 的文本属性很快就会让人头疼。使用has_many :cars 的制造商模型会更好。这将允许您进行更智能的查询,例如Manufacturer.includes(:cars).all。这就是我们首先使用关系数据库的原因。

    【讨论】:

    • 谢谢@Jordan,GROUP_CONTACT 似乎正在做我需要的事情!谈到manufacturer-thing;是的,我正在考虑并意识到这一点,我需要以这种方式对其进行修改。
    猜你喜欢
    • 2016-10-02
    • 1970-01-01
    • 2022-01-03
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多