You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL查询获取当前用户关注用户发布的帖子?

解决方案:获取关注用户的帖子信息流

一、原生SQL实现

你已经能查到当前用户关注的用户列表,只需将这个结果和posts表关联,就能拿到这些用户发布的帖子。以下是两种常用写法:

写法1:使用JOIN关联查询

SELECT posts.*, users.username AS author_username
FROM posts
JOIN users ON posts.user_id = users.id
JOIN user_followers ON user_followers.user_id = posts.user_id
WHERE user_followers.follower_id = "当前用户ID"
ORDER BY posts.created_at DESC;
  • 关联users表是为了获取作者用户名,方便信息流展示;如果不需要可以去掉这部分关联
  • ORDER BY posts.created_at DESC让最新的帖子排在最前面,符合信息流的常规需求

写法2:使用IN子查询

如果觉得JOIN逻辑绕,子查询的方式更直观:

SELECT * FROM posts
WHERE user_id IN (
    SELECT user_id FROM user_followers
    WHERE follower_id = "当前用户ID"
)
ORDER BY created_at DESC;

先通过子查询拿到所有关注用户的ID,再筛选出这些用户发布的帖子,逻辑清晰易懂。

二、GORM链式查询实现

既然你用的是GORM,推荐用ORM链式查询保持代码风格统一,减少手写SQL的工作量:

方式1:一步关联查询(含作者信息)

// 定义结构体接收帖子+作者信息(可选,若不需要作者信息可直接用Post结构体)
type PostWithAuthor struct {
    Post
    AuthorUsername string `gorm:"column:username"`
}

var posts []PostWithAuthor
db.Table("posts").
    Select("posts.*, users.username").
    Joins("JOIN user_followers ON user_followers.user_id = posts.user_id").
    Joins("JOIN users ON users.id = posts.user_id").
    Where("user_followers.follower_id = ?", currentUserId).
    Order("posts.created_at DESC").
    Scan(&posts)

方式2:分步查询(先拿关注用户ID,再查帖子)

如果需要对关注列表做额外处理,分步查询更灵活:

var followedUserIds []string
db.Model(&UserFollowers{}).
    Where("follower_id = ?", currentUserId).
    Pluck("user_id", &followedUserIds)

var posts []Post
db.Where("user_id IN ?", followedUserIds).
    Order("created_at DESC").
    Find(&posts)

注意事项

  • 确保user_followers表的user_id、follower_id字段类型,与users.id、posts.user_id一致(你的UserFollowers用了string类型,但gorm.Model的ID默认是uint,类型不匹配会导致查询失败,建议统一类型)
  • 如果需要在信息流中包含当前用户自己的帖子,只需在WHERE条件里追加OR posts.user_id = "当前用户ID"即可

内容的提问来源于stack exchange,提问作者camelCaseIsGoodPractice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:45:18