Php 用三列转置mysql中的行

Php 用三列转置mysql中的行,php,mysql,database,Php,Mysql,Database,我在mysql中有这个表: id | orden | pacient | per| exam | value | condition | date ---+---------------+----------+----+-------+-------+------------+-------------------- 1 | 201208082001 | 20652598 | 0 | 1017 | 9.00 | 0 | 2012-08-08 09

我在mysql中有这个表:

id | orden         | pacient  | per| exam  | value | condition  | date
---+---------------+----------+----+-------+-------+------------+--------------------
1  | 201208082001  | 20652598 | 0  | 1017  | 9.00  | 0          | 2012-08-08 09:28:21
2  | 201208082001  | 20652598 | 0  | 1018  | 4.80  | 0          | 2012-08-08 09:28:21
3  | 201208082001  | 20652598 | 0  | 4104  | 213.00| 0          | 2012-08-08 09:28:21
4  | 201208082002  | 2799592  | 0  | 1017  | 7.70  | 0          | 2012-08-08 09:29:21
5  | 201208082002  | 2799592  | 0  | 1018  | 2.40  | 0          | 2012-08-08 09:29:21
6  | 201208082002  | 2799592  | 0  | 4104  | 43.00 | 0          | 2012-08-08 09:29:21
7  | 201208082003  | 6058327  | 0  | 1017  | 9.10  | 0          | 2012-08-08 09:30:02
8  | 201208082003  | 6058327  | 0  | 1018  | 4.00  | 0          | 2012-08-08 09:30:02
9  | 201208082003  | 6058327  | 0  | 4104  | 840.00| 0          | 2012-08-08 09:30:02
我需要的是:每组三行具有相同的
orden
相同的
pacient
和不同的
检查
。始终存在一个
CA
值、一个
P
值和一个
PTH
值。我需要检查
pacient
中有
CA>5.5
P>11
(以及其他一些东西)的表的原始形式的任何地方,很难快速轻松地获得这些信息

id | orden         | pacient  | per| CA    | P    | PTH    | condition | date
---+---------------+----------+----+-------+------+------- +-----------+--------------------
1  | 201208082001  | 20652598 | 0  | 9.00  | 4.80 | 213.00 |  0        | 2012-08-08 09:28:21
2  | 201208082002  | 2799592  | 0  | 7.70  | 2.40 | 43.00  |  0        | 2012-08-08 09:28:21
3  | 201208082003  | 6058327  | 0  | 9.10  | 4.00 | 840.00 |  0        | 2012-08-08 09:28:21

这个转置表将在视图中显示,我尝试过使用子查询,但速度非常慢,所以。我希望你能帮助我。

你没有提供很多关于
CA
p
PTH
列中的详细信息,但根据数据,它们看起来分别对应于
1017
1018
4104
。如果是这样,您可能可以使用带有
CASE
表达式的聚合函数将数据从行转换为列:

select orden,
  pacient,
  per,
  max(case when exam = 1017 then value else 0 end) `CA`,
  max(case when exam = 1018 then value else 0 end) `P`,
  max(case when exam = 4104 then value else 0 end) `PTH`,
  `condition`,
  date
from yt
group by orden, pacient, per, `condition`, date;


此版本不使用任何子查询来获取结果。

如果您准确解释第二个表与第一个表的关系,这将非常有用。您是否将
列汇总到producd
pth
?分组?分组条件是什么?也许你可以用每个表的EXPLAIN语句来显示表的结构。这种方法正是我所需要的。谢谢而且速度非常快。@AxelA.Grazx不客气!