如何在PHP PDO中选择一对多关系数据
我在PHPMyAdmin中总共有3个表:如何在PHP PDO中选择一对多关系数据,php,mysql,pdo,foreign-keys,foreign-key-relationship,Php,Mysql,Pdo,Foreign Keys,Foreign Key Relationship,我在PHPMyAdmin中总共有3个表: 电影:tmdb\u电影 Cast:Cast。外键是表tmdb\u电影columntmdb\u id 流派:流派。外键是表tmdb\u电影columntmdb\u id 我想输出以下字段: tmdb\u电影表中的movie\u title列 genres\u name表中的所有genres\u行 表中的所有cast\u name行 选择和回送数据的最小命令是什么?我不熟悉SQL中的join命令 这是我当前的代码 <?php $stmt
tmdb\u电影
Cast
。外键是表tmdb\u电影columntmdb\u id
流派
。外键是表tmdb\u电影columntmdb\u id
表中的tmdb\u电影
列movie\u title
表中的所有genres\u name
genres\u行
- 表中的所有
行cast\u name
join
命令
这是我当前的代码
<?php
$stmt = $conn->prepare("SELECT tmdb_movies.*, GROUP_CONCAT(genres_name) as genres_name
FROM tmdb_movies JOIN genres ON tmdb_movies.tmdb_id=genres.cast_tmdb_id
GROUP BY tmdb_movies.cast_tmdb_id, tmdb_movies.tmdb_id, tmdb_movies.movie_title");
// Then fire it up
$stmt->execute();
// Pick up the result as an array
$result = $stmt->fetchAll();
// Now you run through this array in many ways, for example
foreach ($result as $row) {
print "".$row["movie_title"]." ".$row["genres_name"] ." ".$row["cast_name"] ."<br/>";
}
?>
解释:
GROUP_CONCAT=>一个字段中不同行的CONCAT字段
JOIN=>使两个表按键对应
GROUP BY=>按这些字段分组数据
我已经在没有实际查看表的情况下完成了查询,因此,如果第一次尝试不起作用,您可能希望对其进行调整。您当前的代码是否有错误?如果是这样,错误消息是什么?看起来像tmdb_电影上的
。tmdb_id=genres.cast_tmdb_id
应该是tmdb_电影上的。tmdb_id=genres.genres_tmdb_id
致命错误:未捕获PDOException:SQLSTATE[42S22]:未找到列:中的“group statement”中的1054未知列“tmdb_movies.genres_tmdb_id”
SELECT tmdb_movies.movie_title, GROUP_CONCAT(DISTINCT genres.genres_name SEPARATOR ', ') AS genres_names, GROUP_CONCAT(DISTINCT cast.cast_name SEPARATOR ', ') AS cast_name
FROM tmdb_movies
JOIN genres ON tmdb_movies.tmbd_id=genres.genres_tmdb_id
JOIN cast ON cast.cast_tmdb_id=tmdb_movies.tmbd_id
GROUP BY tmdb_movies.movie_title
ORDER BY tmdb_movies.movie_title