MySQLi电影数据库:如何按上映年份分组展示多部影片
解决MySQLi按年份分组展示电影(年份仅显示一次)的问题
我明白你的需求啦——你想按年份倒序展示电影,每个年份只显示一次标题,下面列出该年所有影片,既不想每部电影都重复显示年份,也不想用GROUP BY只返回每年一部影片。其实不用修改SQL语句,在PHP循环里做个简单的判断就能实现,调整后的代码如下:
<?php include("../header.php"); $servernaam = "localhost"; $username = "root"; $password = ""; $dbnaam = "datainfo1_filmsdb"; $connectie = mysqli_connect($servernaam, $username, $password, $dbnaam); if(mysqli_connect_errno() > 0) { echo "Problemen met het verbinden met de database."; die(); } $sql = "SELECT release_year, title FROM films ORDER BY release_year DESC"; $result = mysqli_query($connectie, $sql); $aantalRijen = mysqli_num_rows($result); echo "<strong><i>Films per year</i></strong>"; echo "<BR />"; if($aantalRijen > 0) { // 初始化变量存储上一个年份,一开始设为一个不可能存在的值 $vorigJaar = -1; while($rij = mysqli_fetch_assoc($result)) { // 只有当前年份和上一个年份不同时,才显示年份标题 if($rij['release_year'] != $vorigJaar) { echo "<BR /><h3>Jaar Gepubliceerd: {$rij['release_year']}</h3>"; // 更新上一个年份为当前年份 $vorigJaar = $rij['release_year']; } // 不管年份是否变化,都显示电影标题 echo "<div><strong>Titel: </strong>{$rij['title']}</div>"; } } mysqli_close($connectie); include("../footer.php"); ?>
关键逻辑说明:
- 保留原SQL查询,确保所有电影按年份倒序排列,这样同一年份的影片会集中在一起
- 新增
$vorigJaar变量记录上一次处理的年份,初始值设为数据库中不可能出现的数值(比如-1) - 循环每条电影数据时,先对比当前影片年份与
$vorigJaar:- 若不一致,说明进入新的年份分组,此时输出年份标题并更新
$vorigJaar - 若一致,直接输出电影标题,不重复显示年份
- 若不一致,说明进入新的年份分组,此时输出年份标题并更新
- 这样就能实现每个年份仅展示一次,下方列出所有同年份影片的效果
内容的提问来源于stack exchange,提问作者DutchiSQL
相关产品推荐
相关产品推荐

