3
这是我的表动物:如何组合GROUP_CONCAT和LEFT JOIN?
╔══════════╦══════╗
║ animal ║ id ║
╠══════════╬══════╣
║ dog ║ 1 ║
║ cat ║ 4 ║
║ cat ║ 3 ║
║ bird ║ 1 ║
╚══════════╩══════╝
这是我的表名:
╔═══════╦══════╗
║ id2 ║ name ║
╠═══════╬══════╣
║ 1 ║ alan ║
║ 2 ║ bob ║
║ 3 ║ john ║
║ 4 ║ sam ║
╚═══════╩══════╝
这是我期望的结果:
╔══════════╦═════════════╗
║ dog ║ alan ║
║ cat ║ sam,john ║
║ bird ║ alan ║
╚══════════╩═════════════╝
我试过这个解决方案:
$sql = '
SELECT n.*,
x.grouped_name FROM names n
LEFT JOIN (SELECT a.id,
GROUP_CONCAT(a.animals) AS grouped_name FROM animals a GROUP BY a.id) x
ON x.id = n.id2';
foreach ($pdo->query($sql) as $row) {
echo '<td>'.$row['animal'].' </td>';
echo '<td>'.$row['grouped_name'].' </td>';
}
但我没有得到结果。
我也试过这个解决方案:
$sql = ' SELECT n.*, (SELECT GROUP_CONCAT(a.id) FROM animals a WHERE a.id = n.id2) AS grouped_name FROM names n';
但我的结果是这样的:
╔══════════╦═════════════╗
║ ║ 1,1 ║
║ ║ 3 ║
║ ║ 4 ║
╚══════════╩═════════════╝
我想我的PHP页面上测试你的代码,并得到一个空白页:'$ SQL =“SELECT t1.animal,GROUP_CONCAT( COALESCE(t2.name,“”)separator',') FROM animals t1 LEFT JOIN名称t2 ON t1.id = t2.id2 GROUP BY t1.animal';' – Jarla
检查PHP脚本的别名期待。查询在MySQL中运行良好。 –
必须与'separator'有冲突,''我试着写'separator',''或'separator'“,”'''但仍然不能正常工作 – Jarla