所以,我有这个“高级”查询(实际上不多),我想将其转换为 Ruby Active Record 的语法。
SELECT microposts.*
FROM microposts
WHERE user_id IN
( SELECT r.followed_id as uid
FROM relationships r
WHERE follower_id = 1
UNION
SELECT u.id as uid
FROM users as u
WHERE id = 1
)
ORDER BY microposts.created_at DESC
这个想法是检索用户 1 的所有微帖子,并且用户 1 按照创建顺序关注用户,但我真的不知道如何使用 Active Record 的语法轻松翻译它。
有什么想法吗?
PS:正如这里所问的是一些 Rails 上下文:
我有 3 个模型:微博
、用户
、关系
。
- Relationships 是一个处理所有用户关系(关注者/被关注者)的连接表。
- 用户通过关系拥有许多 follow_users/follower。
- 用户有多个 microhoop,而 microhoop 有一个用户。
谢谢。
最佳答案
不了解 Ruby,但 SQL 可以简化为:
SELECT microposts.*
FROM microposts
WHERE user_id IN
( SELECT r.followed_id as uid
FROM relationships r
WHERE follower_id = 1
)
OR user_id = 1
ORDER BY microposts.created_at DESC
关于sql - 将一些 SQL 查询转换为事件记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11812727/