在 Rails 中使用 GROUP_CONCAT 查询
Use GROUP_CONCAT query in Rails
我需要 table 的 ids 但是 #pluck
不够快,因为记录太多了。
问题是我想直接从 mysql 中获取字符串,而不是获取任何 Array 或 ActiveRecord::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
给出的最大长度。
也许你可以增加那个值。按照此答案获取更多信息:
我需要 table 的 ids 但是 #pluck
不够快,因为记录太多了。
问题是我想直接从 mysql 中获取字符串,而不是获取任何 Array 或 ActiveRecord::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={}>
然后您可以使用
获取数据作为 idids = data['ids'].split(',').map(&:to_i)
# [41, 40, 38, 42, 39, 43, 45, 44]
显然,结果被截断为 group_concat_max_len
给出的最大长度。
也许你可以增加那个值。按照此答案获取更多信息: