这是我目前的代码,它可以解决一个问题。
$stmt = $conn->prepare("SELECT * FROM tmdb_movies JOIN genres ON genres.genres_tmdb_id=tmdb_movies.tmdb_id
");
// 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/>";
}
问题是,我试图回应电影名称和它的类型。
我想回应:
黑暗骑士 - 行动,犯罪,戏剧
代码回应:
的屏幕截图 的屏幕截图黑暗骑士 - 行动
黑暗骑士 - 犯罪
黑暗骑士 - 戏剧
答案 0 :(得分:1)
要回显您想要的内容,您可以更改您的SQL查询:
$stmt = $conn->prepare("SELECT *, GROUP_CONCAT(genres.genres_name SEPARATOR ', ') AS genre_concat FROM tmdb_movies JOIN genres ON genres.genres_tmdb_id=tmdb_movies.tmdb_id GROUP BY tmdb_movies.movie_title");
// sql strict group by
$stmt = $conn->prepare("SELECT tmdb_movies.movie_title, tmdb_movies.cast_name, GROUP_CONCAT(DISTINCT genres.genres_name SEPARATOR ', ') AS genre_concat FROM tmdb_movies JOIN genres ON genres.genres_tmdb_id=tmdb_movies.tmdb_id GROUP BY tmdb_movies.movie_title, tmdb_movies.cast_name ORDER BY tmdb_movies.movie_title");
$stmt->execute();
$result = $stmt->fetchAll();
foreach ($result as $row) {
print "".$row["movie_title"]." ".$row["genre_concat"] ." ".$row["cast_name"] ."<br/>";}
GROUP_CONCAT允许连接每个独特电影片名的所有不同类型。
更多文档:
GROUP BY:https://www.w3schools.com/sql/sql_groupby.asp
GROUP_CONCAT:https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat
答案 1 :(得分:1)
您可以使用group by
和group_cancat
:
SELECT
tmdb_movies.*, group_concat(genres.genres_name) as genres_names
FROM
tmdb_movies
JOIN
genres
ON
genres.genres_tmdb_id=tmdb_movies.tmdb_id
GROUP BY
tmdb_movies.movie_id
然后打印出来:
foreach ($result as $row) {
echo "{$row['movie_title']} - {$row['genres_names']}<br/>";
}
替代SQL(似乎比上面的sql好):
SELECT
tmdb_movies.*, temp.genres_names
FROM
tmdb_movies
JOIN
(
SELECT
genres_tmdb_id, group_concat(genres_name) as genres_names
FROM
genres
GROUP BY
genres_tmdb_id
) temp
ON
temp.genres_tmdb_id = tmdb_movies.tmdb_id
希望这有帮助。