需求:對多個字段組合進行分組篩選,單字段 GROUP BY 會導致結果缺失。解決思路是使用多字段分組並配合應用層邏輯處理分割標識。
SELECT groups, name, goods
FROM `table`
GROUP BY groups, name
ORDER BY name;
指定 groups, name 兩字段組合分組,保證同組內兩字段值均相同。
查詢結果按分組字段排序後,遍歷數組比較當前行與上一行的分組鍵值:
$result = mysql_query("SELECT groups,name,goods FROM table GROUP BY groups,name ORDER BY name");
$arr = [];
while($row = mysql_fetch_array($result)) {
$arr[] = $row;
}
$prev = null;
foreach($arr as $row) {
if ($prev !== null && $row['groups'] !== $prev['groups']) {
echo '分割符號'; // 組間分隔
}
echo $row['name'] . $row['goods'];
$prev = $row;
}
關鍵點:ORDER BY name 確保同組數據連續;遍歷時對比 groups 字段變化插入分隔符。
ONLY_FULL_GROUP_BY,SELECT 列必須出現在 GROUP BY 或聚合函數中mysql_* 擴展,實際項目請改用 PDO 或 mysqli