如何转换上面的表格给出下面的结果(php mysql)?
期望输出
| perf_o | names | gender | age |
--------------------------------------
| 28 | John Doe | male | 38 |
| 26 | mary jane | female | 20 |
答案 0 :(得分:1)
这个表设计是一个有点傻的键/值设置。它“有点傻”,因为这些设置通常有一个主表和一个详细信息表,但这里的主表是denormalized到详细信息表中。 denormalization似乎没有性能原因。
因此,您需要使用子查询来完美地完成此操作。子查询生成主表。
SELECT DISTINCT names, perf_o FROM tbl
它为输入表中的每个人提供一行。 (这假设每个人都有perf_o
的独特值;我猜这是真的,但你没有这么说。)
然后,您将两次加入详细信息表,每次info
的值。
SELECT master.perf_o, master.names,
gender.d_prov AS gender,
age.d_prov AS age
FROM (
SELECT DISTINCT names, perf_o FROM tbl
) master
LEFT JOIN tbl gender ON gender.perf_o = master.perf_o AND info = 'gender'
LEFT JOIN tbl age ON age.perf_o = master.perf_o AND info = 'age'
每个LEFT JOIN
操作都会选择您选择的一个密钥,并将其与master
表关联。
这似乎很复杂,但对于没有记录年龄或没有性别的情况,它会做一些合理的事情。
对于刚开始使用SQL的人来说,你提出了一个比平常更棘手的问题。请请不要只剪切和粘贴我的答案;而是试着理解它。