gpt4 book ai didi

mysql - 如何在 activerecord 中编写此查询?

转载 作者:可可西里 更新时间:2023-11-01 07:09:46 24 4
gpt4 key购买 nike

假设我有一个 ActiveRecord::Base 子类 User 和表 users,我不确定如何在 ActiveRecord 中编写此查询:

SELECT *
FROM (
SELECT users.*
FROM follows
INNER JOIN users ON users.id = follows.following_id
WHERE username LIKE 'r%' AND follows.follower_id = 5717
LIMIT 10

UNION

SELECT *
FROM users
WHERE username LIKE 'r%'
LIMIT 10
) AS users
LIMIT 10

我正在从自定义生成的表格中进行选择。我将如何开始编写此查询?这可能吗?如果是,如何,如果不是,我的替代方案是什么?

谢谢!

最佳答案

谢谢,这是一个有趣的问题。

基于 that UNION implementation ,我认为这应该可以解决问题:

# first sub query, inversed compared to your's, so that we get user fields
followed = User.group( 'users.id, users.username, follows.follower_id' ).having( "users.username like 'r%' and follows.follower_id = 5717" ).joins( :follows )

# second sub query
user = User.where( "username like 'r%'" )

# joining both using union
related_people_query = [ followed, user ].map { |query| query.select( 'users.id' ).to_sql }.join( ' UNION ' )
related_people = User.where( "users.id IN (#{related_people_query)" ).limit(10)

当然,这是一个很大的查询,我无法对其进行测试,所以我很想知道它是否适合您。

编辑:我在第一个子查询中忘记了 #joins

编辑 2:忘记限制

关于mysql - 如何在 activerecord 中编写此查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18873499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com