这是我的mySQL表animals:
???????????????????
? animal ? name ?
???????????????????
? dog ? sam ?
? cat ? fred ?
? cat ? todd ?
? bird ? alan ?
???????????????????
Run Code Online (Sandbox Code Playgroud)
我想在表格中选择所有数据:
$sql = 'SELECT * FROM animals';
foreach ($pdo->query($sql) as $row) {
echo '<td>'.$row['animal'].' </td>';
echo '<td>'.$row['name'].' </td>';
}
Run Code Online (Sandbox Code Playgroud)
我的结果是:
???????????????????
? dog ? sam ?
? cat ? fred ?
? cat ? todd ?
? bird ? alan ?
???????????????????
Run Code Online (Sandbox Code Playgroud)
但我想只用同一个动物输出一次行,但是所有的名字都在一行中,如下所示:
??????????????????????????
? dog ? sam ?
? cat ? fred, todd ?
? bird ? alan ?
??????????????????????????
Run Code Online (Sandbox Code Playgroud)
我不知道如何实现这一目标.我试着朝这个方向思考:
SELECT * FROM animals GROUP BY animal
Run Code Online (Sandbox Code Playgroud)
但我被卡住了!我很高兴每一个提示!
SELECT
a.animal
GROUP_CONCAT(a.name) names
FROM animals a
GROUP BY a.animal
Run Code Online (Sandbox Code Playgroud)
注意检查我更改的查询并将您的php片段更改$row['name'] 为$row['names']
更新将您的循环更改为:
foreach ($pdo->query($sql) as $row) {
echo '<tr><td>'.$row['animal'].' </td>';
echo '<td>'.$row['names'].' </td></tr>';
}
Run Code Online (Sandbox Code Playgroud)
MySQL有一个非标准的SQL函数,GROUP_CONCAT专门用于执行此操作.
用于:
SELECT animal, GROUP_CONCAT(name) as grouped_name FROM animals GROUP BY animal
Run Code Online (Sandbox Code Playgroud)
在PHP中使用:
$sql = ' SELECT animal, GROUP_CONCAT(name) as grouped_name FROM animals GROUP BY animal';
foreach ($pdo->query($sql) as $row) {
echo '<td>'.$row['animal'].' </td>';
echo '<td>'.$row['grouped_name'].' </td>';
}
Run Code Online (Sandbox Code Playgroud)
请注意具有该组的列是如何重命名/别名的,grouped_name因为该name列不再是该列.您可以grouped_name在sql结果中通过别名引用此列.
| 归档时间: |
|
| 查看次数: |
2598 次 |
| 最近记录: |