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

如何通过单条SQL查询同时获取关注用户帖子和热门补充帖子?

实现方案

可以通过UNION ALL拼接两个结果集,再加优先级标识排序的方式实现单条SQL完成需求,具体语句如下:

SELECT * FROM (
  -- 第一部分:取关注用户的最新帖子,优先级设为1
  SELECT *, 1 AS priority 
  FROM posts 
  WHERE author_id IN (
    SELECT followedID FROM follows WHERE followerID = :myID
  )
  ORDER BY id DESC 
  LIMIT 10

  UNION ALL

  -- 第二部分:取非关注用户的热门帖子,优先级设为2,排除已关注用户避免内容重复
  SELECT *, 2 AS priority 
  FROM posts 
  WHERE author_id NOT IN (
    SELECT followedID FROM follows WHERE followerID = :myID
  )
  ORDER BY post_likes DESC 
  LIMIT 10
) AS combined_posts
-- 全局排序保证优先级高的内容在前
ORDER BY priority ASC,
  -- 同优先级下按对应规则排序:关注帖按发布时间倒序,热门帖按点赞倒序
  CASE WHEN priority = 1 THEN id END DESC,
  CASE WHEN priority = 2 THEN post_likes END DESC
-- 最终取满10条
LIMIT 10;

逻辑说明

  • 内层两个查询分别提前取出最多10条关注帖、10条热门帖作为备用,避免全表扫描性能损耗
  • 优先级标识保证关注帖永远排在热门帖前面,若关注帖不足10条,缺口会自动用后续的热门帖补齐
  • 新增的author_id NOT IN过滤条件,避免同一个帖子重复出现在结果集中

如果需要热门帖在点赞数接近时随机展示,只需要把第二部分的排序规则改为ORDER BY post_likes DESC, RAND()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:36:02