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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 14:22:53