在Rails中使用GROUP_CONCAT查询

问题描述 投票:1回答:1

我需要 ids 桌而 #pluck 的速度不够快,因为记录太多。mysql 而不是得到任何 阵列ActiveRecord::Relationship

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

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

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

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

有什么办法可以解决为什么不返回所有的记录,或者我可以用别的方法来实现吗?

mysql ruby-on-rails rails-activerecord
1个回答
5
投票

很明显,结果会被截断到最大长度,而这个长度是由 group_concat_max_len.

也许你可以增加这个数值。按照这个答案来获取更多信息。

https:/stackoverflow.coma55459048195530。


0
投票

你可以这样称呼它

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={}>

然后你就可以用

ids = data['ids'].split(',').map(&:to_i)
# [41, 40, 38, 42, 39, 43, 45, 44]
© www.soinside.com 2019 - 2024. All rights reserved.