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

MySQL与PHP实现同一encounter仅显一次、对应多mode展示的可行性问询

问题描述

我不确定是否可行,但想咨询:我的MySQL数据库里有个raid_list表,包含encounter、mode、encounter_id字段。比如encounter_id为4时,encounter值是"Crota"(对应多条记录),mode分别是"Normal"和"Master",能不能在echo输出时只显示一次"Crota",同时把这两个mode值都展示出来?

当前用的查询语句:

$ce = $database->pdo->query("SELECT * FROM `raid_list` WHERE `raid_id` = 13 ORDER BY `encounter_id` ASC")->fetchAll(PDO::FETCH_ASSOC);

PHP代码:

<?php foreach($ce as $data) {
      echo '<div class="encounter">';
      echo '<p>' . $data['encounter'] . '</p>';
      echo '<p>(' . $data['mode'][0] . ')</p>';
      echo '</div>';
} ?>

附数据库截图:显示表中同一encounter_id对应不同mode的多条记录


解决方案

当然可以实现,提供两种常用方法:

方法一:SQL聚合查询(推荐)

利用MySQL的GROUP_CONCAT函数,将同一encounter_id(或encounter)对应的所有mode合并成一个字符串,这样查询结果每条记录对应唯一的encounter,直接输出即可。

修改后的SQL查询:

SELECT 
  encounter_id, 
  encounter, 
  GROUP_CONCAT(DISTINCT mode SEPARATOR ', ') AS modes 
FROM `raid_list` 
WHERE `raid_id` = 13 
GROUP BY encounter_id, encounter 
ORDER BY encounter_id ASC

对应的PHP输出代码:

<?php foreach($ce as $data) {
      echo '<div class="encounter">';
      echo '<p>' . $data['encounter'] . '</p>';
      echo '<p>(' . $data['modes'] . ')</p>';
      echo '</div>';
} ?>

方法二:PHP分组处理

如果不想修改SQL,可以在PHP中先对查询结果按encounter_id分组,再遍历分组后的数据输出。

示例代码:

<?php
// 第一步:按encounter_id分组整理数据
$groupedData = [];
foreach($ce as $item) {
    $id = $item['encounter_id'];
    if (!isset($groupedData[$id])) {
        $groupedData[$id] = [
            'encounter' => $item['encounter'],
            'modes' => []
        ];
    }
    $groupedData[$id]['modes'][] = $item['mode'];
}

// 第二步:遍历分组后的数据输出
foreach($groupedData as $data) {
    echo '<div class="encounter">';
    echo '<p>' . $data['encounter'] . '</p>';
    echo '<p>(' . implode(', ', $data['modes']) . ')</p>';
    echo '</div>';
}
?>

内容的提问来源于stack exchange,提问作者Dodofury

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:45:09