在 Rails 中使用 GROUP_CONCAT 查询

Use GROUP_CONCAT query in Rails

我需要 table 的 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)

问题是我不知道为什么,但它并没有 return table 的所有 ids,而是其中的一部分.

知道为什么不 return 所有这些或者我怎样才能以不同的方式实现它?

你可以这样称呼它

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]

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

也许你可以增加那个值。按照此答案获取更多信息: