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

如何在PHP操作的MySQL表中查询同时包含指定多名演员的电影

解决方案

完全可以通过单次MySQL查询实现需求,无需分别查询结果后再做数组比对,查询性能和代码简洁度都更高,以下是两种常用实现方案:

方案1:分组聚合筛选(推荐,扩展性更强)

实现逻辑

先过滤出所有包含目标演员的参演记录,按电影ID分组后筛选出分组内不重复演员数量刚好等于目标演员总数的分组,即为同时包含所有指定演员的电影。

示例SQL(以查询同时包含Bob Peck和Janet McTeer的电影为例)

SELECT movieID
FROM movieCast
WHERE idNum IN ('Bob Peck', 'Janet McTeer')
GROUP BY movieID
HAVING COUNT(DISTINCT idNum) = 2;

注:DISTINCT用于避免同一个演员在同一部电影中饰演多个角色导致计数错误,如果你的表已做movieID + idNum唯一约束,可省略DISTINCT。如果需要查询同时包含N个演员的电影,只需修改IN中的参数列表,同时将HAVING后的计数改为N即可。

方案2:自联结查询

实现逻辑

将演员表和自身做内联结,关联条件为电影ID相同,分别在两张关联表中匹配不同的目标演员,最终返回的去重电影ID即为符合要求的结果。

示例SQL

SELECT DISTINCT t1.movieID
FROM movieCast t1
INNER JOIN movieCast t2 
  ON t1.movieID = t2.movieID
WHERE t1.idNum = 'Bob Peck'
  AND t2.idNum = 'Janet McTeer';

PHP调用示例(PDO预处理,避免SQL注入)

// 数据库连接配置请替换为实际值
$pdo = new PDO('mysql:host=127.0.0.1;dbname=movie_db;charset=utf8mb4', 'root', 'your_password');

// 两个目标演员
$actor1 = 'Bob Peck';
$actor2 = 'Janet McTeer';

$sql = "SELECT movieID FROM movieCast WHERE idNum IN (?, ?) GROUP BY movieID HAVING COUNT(DISTINCT idNum) = 2";
$stmt = $pdo->prepare($sql);
$stmt->execute([$actor1, $actor2]);
// 获取符合要求的所有电影ID数组
$matchMovies = $stmt->fetchAll(PDO::FETCH_COLUMN);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:18:01