我也遇到这样的情况,但是解决不了。
结构数据库:
表元素
id | idElemento | idTipo
1 | 1 | 1
表蒂皮
id | Tipo
1 | Persona
表瓦洛里
id | idElemento | idInfo | Valore
1 | 1 | 1 | Mario
1 | 1 | 2 | Rossi
1 | 1 | 3 | 0810000000
1 | 1 | 3 | 3330000000
表格信息
id | Info | Multi
1 | Nome | 0
1 | Cognome | 0
1 | Telefono | 1
期望的结果:
idElemento | Nome | Cognome | Telefono |
1 | Mario | Rossi | 0810000000, 3330000000 |
最佳答案
正如亚历山大所评论的,信息表必须有一个与信息相关的增量字段(1,2,3)。
您可以使用 group_concat 组合 Telfono功能。
因为,您希望基本上从表 info 中填充字段。这涉及transpose table concept:
SELECT idelemento
,max(CASE
WHEN t1.info = 'Nome'
THEN t1.value
ELSE NULL
END) AS Nome
,max(CASE
WHEN t1.info = 'Cognome'
THEN t1.value
ELSE NULL
END) AS Cognome
,max(CASE
WHEN t1.info = 'Telefono'
THEN t1.value
ELSE NULL
END) AS Telefono
FROM (
SELECT idElemento
,info.info
,group_concat(valore separator ', ') value
FROM valori
INNER JOIN info ON info.id = valori.idInfo
GROUP BY idInfo
) t1;
内部查询在没有转置数据的情况下给出了完全相同的结果。但是,我不确定为什么您需要填充表 info 中的字段。但你可以这样:
关于mysql - 动态查询MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25992302/