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

如何编写SQL查询识别用户未观看的系列剧集下一集

如何查询指定用户某系列未观看的下一集

别担心!刚学5小时SQL遇到这种问题太正常了,咱们一步步拆解来解决你的需求:

首先,你的核心需求是:给定一个用户ID和系列的titleID,找出这个用户在该系列里还没看过的下一集。咱们先理清楚需要用到的表和它们的关联关系:

  • history:存储用户看过的剧集,通过userID、titleID、episodeID关联
  • Series:关联了titleID(系列标识)和episodeID(该系列下的所有剧集)
  • Episode:存储剧集的详细信息(比如名称)

第一步:锁定目标用户和系列

咱们先明确要查询的目标用户(比如userID=8924)和目标系列(titleID='WalkingDead'),后续所有查询都围绕这个范围展开。

第二步:找出该系列中用户未观看的剧集

你之前用LEFT JOIN没得到正确结果,主要是没把用户和系列的条件放到关联逻辑里,也没通过Series表限定同一系列的剧集。正确的关联方式如下:

-- 先筛选出该系列中用户没看过的所有剧集ID
SELECT s.episodeID
FROM Series s
-- 左关联用户的观看历史,同时限定用户和系列
LEFT JOIN history h 
  ON s.episodeID = h.episodeID 
  AND h.userID = 8924 
  AND h.titleID = 'WalkingDead'
WHERE s.titleID = 'WalkingDead'
-- 没有匹配到观看记录的剧集,就是用户未看过的
AND h.episodeID IS NULL;

第三步:获取剧集详情并找到“下一集”

要拿到剧集名称等信息,咱们把Episode表关联进来,再按剧集ID排序(你的剧集ID是按顺序命名的,比如WDS2E1、WDS2E2),取第一个结果就是用户该看的下一集:

SELECT e.episodeID, e.episodeName
FROM Series s
-- 关联Episode表获取剧集详情
JOIN Episode e ON s.episodeID = e.episodeID
-- 左关联用户观看历史,限定目标用户和系列
LEFT JOIN history h 
  ON s.episodeID = h.episodeID 
  AND h.userID = 8924 
  AND h.titleID = 'WalkingDead'
WHERE s.titleID = 'WalkingDead'
-- 筛选出用户未观看的剧集
AND h.episodeID IS NULL
-- 按剧集顺序排序,确保下一集是序列中的下一个
ORDER BY s.episodeID ASC
-- 只返回第一个结果,就是目标下一集
LIMIT 1;

给你拆解每一部分的作用:

  • JOIN Episode e ON s.episodeID = e.episodeID:把Series里的剧集ID和Episode的详情关联起来,这样能拿到剧集名称。
  • LEFT JOIN history h ON ...:把用户ID和系列ID的条件放到关联逻辑里,而非WHERE子句,这样LEFT JOIN会保留该系列所有剧集,只有用户看过的剧集才会匹配到history的记录,未观看的剧集对应的h.episodeID会是NULL。
  • WHERE s.titleID = 'WalkingDead':确保只处理这个系列的剧集。
  • AND h.episodeID IS NULL:筛选出用户没有观看记录的剧集。
  • ORDER BY s.episodeID ASC:按剧集ID从小到大排序,保证“下一集”是序列里的下一个。
  • LIMIT 1:只返回第一个结果,也就是用户该看的下一集。

如果你想动态切换用户和系列,只需要把8924和WalkingDead换成对应的变量就行啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:56:36