如何在多列中使用 MySQL group_concat() 函数
How to use MySQL group_concat() function in more than one column
我有这个问题
SELECT de.id as id_evento,de.evento, dp.id as id_participante,
dp.nombre as participante,pn.participacion,
pn.id as id_participacion
FROM difusion_evento de,difusion_evento_participante dep,difusion_participante dp,
difusion_participacion pn
WHERE de.id=dep.difusion_evento_id
AND dep.difusion_participante_id=dp.id
AND dep.difusion_participacion_id=pn.id
AND de.id=5
ORDER BY 3,6
结果是:
id_evento evento id_participante participante participacion id_participacion
5 5TO SEMINARIO PERMANENTE… 8 Name1 participante 2
5 5TO SEMINARIO PERMANENTE… 8 Name1 comentarista 4
5 5TO SEMINARIO PERMANENTE… 9 Name2 participante 2
5 5TO SEMINARIO PERMANENTE… 10 Name3 participante 2
但我希望结果如下所示:
id_evento evento id_participante participante participacion id_participacion
5 5TO SEMINARIO PERMANENTE… 8 Name1 participante,comentarista 2, 4
5 5TO SEMINARIO PERMANENTE… 9 Name2 participante 2
5 5TO SEMINARIO PERMANENTE… 10 Name3 participante 2
也就是说,我希望 id_participante 列显示为 DISTINCT,而 participacion
和 id_participacion
两列被分组。例如,Name1 出现了两次,我想将其结果分组在一列中。
我已经尝试了 GROUP_CONCAT() 但没有成功,有什么想法可以实现吗?
已解决
感谢第一个答案,我确实错过了 GROUP BY id_participante
所以工作查询是:
SELECT de.id as id_evento,de.evento, dp.id as id_participante,
dp.nombre as participante,GROUP_CONCAT(pn.participacion SEPARATOR ', '),
GROUP_CONCAT(pn.id SEPARATOR ', ') as id_participacion
FROM difusion_evento de,difusion_evento_participante dep,difusion_participante dp,
difusion_participacion pn
WHERE de.id=dep.difusion_evento_id
AND dep.difusion_participante_id=dp.id
AND dep.difusion_participacion_id=pn.id
AND de.id=5
GROUP BY id_participante
ORDER BY 3,6
使用 GROUP BY id_participante
按 id_participante
分组。
您将在不同的行上有不同的参与者 ID,其他字段按参与者 ID 组合在一起。
SELECT de.id as id_evento,de.evento, dp.id as id_participante,
dp.nombre as participante,pn.participacion,
pn.id as id_participacion
FROM difusion_evento de,difusion_evento_participante dep,difusion_participante dp,
difusion_participacion pn
WHERE de.id=dep.difusion_evento_id
AND dep.difusion_participante_id=dp.id
AND dep.difusion_participacion_id=pn.id
AND de.id=5
GROUP BY id_participante
ORDER BY 3,6
我有这个问题
SELECT de.id as id_evento,de.evento, dp.id as id_participante,
dp.nombre as participante,pn.participacion,
pn.id as id_participacion
FROM difusion_evento de,difusion_evento_participante dep,difusion_participante dp,
difusion_participacion pn
WHERE de.id=dep.difusion_evento_id
AND dep.difusion_participante_id=dp.id
AND dep.difusion_participacion_id=pn.id
AND de.id=5
ORDER BY 3,6
结果是:
id_evento evento id_participante participante participacion id_participacion
5 5TO SEMINARIO PERMANENTE… 8 Name1 participante 2
5 5TO SEMINARIO PERMANENTE… 8 Name1 comentarista 4
5 5TO SEMINARIO PERMANENTE… 9 Name2 participante 2
5 5TO SEMINARIO PERMANENTE… 10 Name3 participante 2
但我希望结果如下所示:
id_evento evento id_participante participante participacion id_participacion
5 5TO SEMINARIO PERMANENTE… 8 Name1 participante,comentarista 2, 4
5 5TO SEMINARIO PERMANENTE… 9 Name2 participante 2
5 5TO SEMINARIO PERMANENTE… 10 Name3 participante 2
也就是说,我希望 id_participante 列显示为 DISTINCT,而 participacion
和 id_participacion
两列被分组。例如,Name1 出现了两次,我想将其结果分组在一列中。
我已经尝试了 GROUP_CONCAT() 但没有成功,有什么想法可以实现吗?
已解决 感谢第一个答案,我确实错过了 GROUP BY id_participante
所以工作查询是:
SELECT de.id as id_evento,de.evento, dp.id as id_participante,
dp.nombre as participante,GROUP_CONCAT(pn.participacion SEPARATOR ', '),
GROUP_CONCAT(pn.id SEPARATOR ', ') as id_participacion
FROM difusion_evento de,difusion_evento_participante dep,difusion_participante dp,
difusion_participacion pn
WHERE de.id=dep.difusion_evento_id
AND dep.difusion_participante_id=dp.id
AND dep.difusion_participacion_id=pn.id
AND de.id=5
GROUP BY id_participante
ORDER BY 3,6
使用 GROUP BY id_participante
按 id_participante
分组。
您将在不同的行上有不同的参与者 ID,其他字段按参与者 ID 组合在一起。
SELECT de.id as id_evento,de.evento, dp.id as id_participante,
dp.nombre as participante,pn.participacion,
pn.id as id_participacion
FROM difusion_evento de,difusion_evento_participante dep,difusion_participante dp,
difusion_participacion pn
WHERE de.id=dep.difusion_evento_id
AND dep.difusion_participante_id=dp.id
AND dep.difusion_participacion_id=pn.id
AND de.id=5
GROUP BY id_participante
ORDER BY 3,6