Php 将行转换为列

Php 将行转换为列,php,mysql,Php,Mysql,我正试图从两个表格中找出一个结果集,这是我从来没有做过的,我在弄清楚如何做,甚至在这些论坛中搜索什么方面有点困难。考虑下面的假设表数据: Table1 ---------------------------------- ID | Name ---------------------------------- 1 | aa 2 | bb 3 | cc 4 | dd 5 | ee Table2 ---------------------------------

我正试图从两个表格中找出一个结果集,这是我从来没有做过的,我在弄清楚如何做,甚至在这些论坛中搜索什么方面有点困难。考虑下面的假设表数据:

Table1
----------------------------------
ID  |  Name
----------------------------------
1   |  aa
2   |  bb
3   |  cc
4   |  dd
5   |  ee


Table2
----------------------------------
ID  |  Table1_ID  |  Value
----------------------------------
1   |  1          |  good
2   |  2          |  Dumb
3   |  3          |  Fat
4   |  4          |  Wet
5   |  5          |  High
6   |  1          |  Thin
7   |  2          |  Tall
8   |  3          |  Goofy
9   |  4          |  Rich
10  |  5          |  Funny
我正在寻找一个查询或方法,该查询或方法允许我以以下结果集结束: 代码:


本质上,我希望能够从表1中获取名称列表,将它们转换为列标题,然后将表2的所有值放入各自的列中,并能够对任何列进行排序。这可能吗?

当然,这可以在SQL中完成。但这很棘手。由于数据写在问题中,您可以按
t2.id
分组,每组5人。然后,查询就是条件聚合

select max(case when t2.table1_Id = 1 then value end) as aa,
       max(case when t2.table1_Id = 2 then value end) as bb,
       max(case when t2.table1_Id = 3 then value end) as cc,
       max(case when t2.table1_Id = 4 then value end) as dd,
       max(case when t2.table1_Id = 5 then value end) as ee
from table2 t2 
group by cast(t2.id - 1 / 5 as int);

让值通过其
id
s隐式关联似乎是一种非常非常糟糕的数据库设计。应该有某种实体id来组合它们。

这里有两个问题: 1) 使用值作为列名不能以干净的方式完成 2) 您希望将table2.value拆分为两行:哪些值应位于哪一行?Gordon Linoff为此使用table2.id字段,但是如果它是自动递增的,并且您的数据稍后会得到一些添加/删除,那么节奏就会被打破

以前也有类似的问题。这个问题的答案非常接近:


在这里,它们为查询生成字符串,并从中生成一条准备好的语句。

您可以通过将数据逻辑保存到数组中来进行排序。你尝试过什么吗?我认为这不能在原始SQL查询本身中完成。但是在PHP代码中?当然正如我所说,如果您首先将所有内容移动到一个数组中,您可以随意修改它。感谢您的响应,但是table1 id是动态更改的…?SQL查询具有恒定的列名。如果需要变量列名,则必须使用动态SQL。
select max(case when t2.table1_Id = 1 then value end) as aa,
       max(case when t2.table1_Id = 2 then value end) as bb,
       max(case when t2.table1_Id = 3 then value end) as cc,
       max(case when t2.table1_Id = 4 then value end) as dd,
       max(case when t2.table1_Id = 5 then value end) as ee
from table2 t2 
group by cast(t2.id - 1 / 5 as int);