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

PHP8.1与MySQLi SQL查询求助:获取目标演员参演剧集及指定演员信息

针对两个SQL需求的解决方案

需求1:获取当前剧集第一个参演过其他剧集的演员信息

先筛选出当前剧集的所有演员,再判断这些演员是否有其他剧集的参演记录,最后取第一条结果(建议添加排序规则保证结果稳定):

SELECT ta.actorid, ta.actorname
FROM tvshow_actors ta
JOIN tvshow_starredin ts ON ta.actorid = ts.actorid
WHERE ts.tvshowid = '27641'
AND EXISTS (
    SELECT 1
    FROM tvshow_starredin ts_other
    WHERE ts_other.actorid = ta.actorid
    AND ts_other.tvshowid != '27641'
)
ORDER BY ta.actorid -- 可根据需求调整排序字段,比如actorname
LIMIT 1;

补充说明:

  • 用EXISTS判断演员是否有跨剧集参演记录,效率比统计数量更高
  • 必须添加ORDER BY,否则LIMIT 1的结果可能随机,无法保证每次取到同一个“第一个”演员
  • 直接关联当前剧集的参演记录,避免冗余子查询

需求2:列出/统计Ted Cassidy除当前剧集外的参演剧集

列出所有剧集详情

关联剧集表和参演记录表,排除当前剧集ID,获取完整剧集数据:

SELECT t.tvshowid, t.title, ts.role
FROM tvshow t
JOIN tvshow_starredin ts ON t.tvshowid = ts.tvshowid
WHERE ts.actorid = '20317'
AND ts.tvshowid != '27641';

统计参演剧集数量

如果只需要统计总数,用COUNT即可:

SELECT COUNT(DISTINCT ts.tvshowid) AS total_shows
FROM tvshow_starredin ts
WHERE ts.actorid = '20317'
AND ts.tvshowid != '27641';

对你原有SQL的问题说明

你原语句存在两处核心问题:

  • 表名/字段名不匹配(比如定义的表是tvshow_actors,但写的是tv_show_actors;字段tvshowid写成了tvshow_id)
  • 未筛选“参演过其他剧集”的条件,只是取出当前剧集的第一个演员,不符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:56:19