使用另一个表mysql php的行值导出另一个表

时间:2017-11-03 13:06:14

标签: php mysql key-value

enter image description here

如何转换上面的表格给出下面的结果(php mysql)?

期望输出

| perf_o | names      | gender | age |
-------------------------------------- 
| 28     |  John Doe  |  male  | 38  |
| 26     |  mary jane | female | 20  |

1 个答案:

答案 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的人来说,你提出了一个比平常更棘手的问题。请不要只剪切和粘贴我的答案;而是试着理解它。