3 回答
TA贡献1827条经验 获得超4个赞
每个 $row 包含标题(“Snitch”)和一种类型。你循环这个,所以它与每一行的标题相呼应。试试这个替换:
$oldtitle = $title = '';
while ($row = $stmt->fetch()){
$title= $row['title'];
if ( $oldtitle == $title ) $title = '';
else $oldtitle = $title;
$genre= $row['genre'];
?>
<h1> <?php echo $title ; ?> </h1>
<h1> <?php echo $genre ; ?> </h1>
<?php } ?>
TA贡献1887条经验 获得超5个赞
您可以使用PDO 的常量和方法fetchAll()。试试PDO::FETCH_GROUP。它将按第一列对查询中的所有结果进行分组。在这种情况下,我只获取 2 列title和genre. 结果是:
Array (
[snitch] => Array (
[0] => Action
[1] => Drama
[2] => Crime
)
)
我将它与它混合PDO::FETCH_COLUMN以在我的子数组中只获取一列,但您不需要这样做,您可以获得整个数组。
$stmt = $pdo->query("SELECT title, genre
FROM movie, genre, movie_genre
WHERE movie.movie_id = movie_genre.movie_id
AND genre.genre_id = movie_genre.genre_id
And movie.title='snitch'
");
$data = $stmt->fetchAll(\PDO::FETCH_GROUP|\PDO::FETCH_COLUMN);
foreach($data as $title => $genres){
echo '<h1>'.$title.'</h1>';
foreach($genres as $genre){
echo '<h2>'.$genre.'</h2>';
}
}
TA贡献1859条经验 获得超6个赞
在选择部分您没有提到任何字段。你可以用 2 种方式。
SELECT movie.movie_id , movie.title , genre.genre
FROM movie, genre, movie_genre WHERE movie.movie_id =
movie_genre.movie_id AND genre.genre_id = movie_genre.genre_id And
movie.name='snitch'
或者
SELECT movie.movie_id , movie.title , genre.genre
FROM movie
INNER JOIN movie_genre ON movie.movie_id = movie_genre.movie_id
INNER JOIN genre ON genre.genre_id = movie_genre.genre_id
WHERE movie.name='snitch'
- 3 回答
- 0 关注
- 149 浏览
添加回答
举报