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
相关产品推荐
相关产品推荐

