【问题标题】:Use GROUP_CONCAT query in Rails在 Rails 中使用 GROUP_CONCAT 查询
【发布时间】:2020-04-28 17:20:51
【问题描述】:

我需要一个表的ids,但#pluck 不够快,因为记录太多。 问题是我想直接从 mysql 获取它们的字符串,而不是获取任何 ArrayActiveRecord::Relation

[1, 2, 3] => "1,2,3"

Rails 中没有group_concat,所以我只是通过 sql 询问。示例:

sql = User.select("GROUP_CONCAT(users.id)").to_sql
ActiveRecord::Base.connection.exec_query(sql)

问题是我不知道为什么,但它没有返回表的所有 id,而只是返回其中的一部分。

知道为什么不返回所有这些,或者我如何以不同的方式实现它?

【问题讨论】:

  • 在 mySQL 中 group_conact 被限制为 1024 的大小。虽然可以增加。

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


【解决方案1】:

显然,结果被截断为group_concat_max_len 给出的最大长度。

也许您可以增加该值。按照这个答案获取更多信息:

https://stackoverflow.com/a/5545904/8195530

【讨论】:

    【解决方案2】:

    你可以这样称呼它

    sql = "select GROUP_CONCAT(id) from users"
    data = ActiveRecord::Base.connection.exec_query(sql)
    # #<ActiveRecord::Result:0x0000560661a2b7d8 @columns=["ids"], @rows=[["41,40,38,42,39,43,45,44"]], @hash_rows=nil, @column_types={}>
    

    然后您可以使用 id 获取数据

    ids = data['ids'].split(',').map(&:to_i)
    # [41, 40, 38, 42, 39, 43, 45, 44]
    

    【讨论】:

    • 是的@Eyeslandic,我就是这么做的。问题是我不知道为什么,但从 4614 个用户那里我只收到 263 个 ID。这就是问题
    猜你喜欢
    • 2014-03-09
    • 1970-01-01
    • 2018-05-12
    • 2016-11-16
    • 1970-01-01
    • 2013-05-13
    • 2012-10-24
    • 1970-01-01
    • 2010-09-27
    相关资源
    最近更新 更多