gpt4 book ai didi

php - 通过php在mysql中选择行作为列

转载 作者:行者123 更新时间:2023-11-29 00:37:18 25 4
gpt4 key购买 nike

您好,我正在尝试在 mysql 中成功选择行作为列。

也许有人可以帮助我。

这是我的 table 的样子

+----------+----------------------------------------------------+----------+
| brand_id | brand_name | linecode |
+----------+----------------------------------------------------+----------+
| DPQT | 1-800 Tow Truck | DER |
| DPQT | 1-800 Tow Truck | DCF |
| DPQT | 1-800 Tow Truck | DCA |
| DPQT | 1-800 Tow Truck | AAA |
| DPQT | 1-800 Tow Truck | DDD |
| BLGR | 1-800-Radiator | Curt |
| BGVM | 100+ Manufacturing/Coyote | ASC |
| DPQS | 10C Technologies Inc | AQW |
| DPQS | 10C Technologies Inc | ASQ |
| FDJG | 2 Cool AirVents | CAS |

我正在努力让结果看起来像:

   +----------+----------------------------------------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+--------+
| brand_id | brand_name | Code1 | Code2 | Code3 | Code4 | Code5 | Code6 | Code7 | Code8 | Code9 | Code10 |
+----------+----------------------------------------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+--------+
| DPQT | 1-800 Tow Truck | DCF | DCA | AAA | DDD | DER | NULL | NULL | NULL | NULL | NULL |
| BLGR | 1-800-Radiator | Curt | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
| BGVM | 100+ Manufacturing/Coyote | ASC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
| DPQS | 10C Technologies Inc | ASQ | AQW | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
| FDJG | 2 Cool AirVents | CAS | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |

如您所见,当 brand_id 和 brand_name 相同时,我想将行代码分组到单独的列中

最大线路代码将永远是 10。这就是为什么我有 Code1-Code10

这就是我现在正在做的,但没有用。

$sql0 = 'set @num := 0';
$result = mysqli_query($dbh,"select brand_id, brand_name,
max(case when group_row_number = 1 then linecode end) Code1,
max(case when group_row_number = 2 then linecode end) Code2,
max(case when group_row_number = 3 then linecode end) Code3,
max(case when group_row_number = 4 then linecode end) Code4,
max(case when group_row_number = 5 then linecode end) Code5,
max(case when group_row_number = 6 then linecode end) Code6,
max(case when group_row_number = 7 then linecode end) Code7,
max(case when group_row_number = 8 then linecode end) Code8,
max(case when group_row_number = 9 then linecode end) Code9,
max(case when group_row_number = 10 then linecode end) Code10
from ( select brand_id, brand_name, linecode, @num := @num + 1 as group_row_number from linecodes_temp ) src
group by brand_id, brand_name
order by if(linecode = '' or linecode is null,1,0), brand_name ASC");

我得到的结果是

+----------+----------------------------------------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+--------+
| brand_id | brand_name | Code1 | Code2 | Code3 | Code4 | Code5 | Code6 | Code7 | Code8 | Code9 | Code10 |
+----------+----------------------------------------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+--------+
| DPQT | 1-800 Tow Truck | DER | DCF | DCA | AAA | DDD | NULL | NULL | NULL | NULL | NULL |
| BLGR | 1-800-Radiator | NULL | NULL | NULL | NULL | NULL | Curt | NULL | NULL | NULL | NULL |
| BGVM | 100+ Manufacturing/Coyote | NULL | NULL | NULL | NULL | NULL | NULL | ASC | NULL | NULL | NULL |
| DPQS | 10C Technologies Inc | NULL | NULL | NULL | NULL | NULL | NULL | NULL | AQW | ASQ | NULL |
| FDJG | 2 Cool AirVents | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | CAS |

我需要一种方法,一旦 brand_id 和 brand_name 发生变化,num 变量就会恢复为 0。

如您所见,它正在执行我希望它执行的操作,但是一旦它转到下一行,num 变量将继续上升到下一列。那么这就是添加下一行代码的地方。我假设我需要在某个地方使用 if 语句,但我不知道该怎么做。

如果有人可以更新我的查询以便发生这种情况,我将非常感激

感谢您的宝贵时间。

最佳答案

您在谈论部分转置,PHP 不会自动执行此操作。但是,您可以自己做一些小的修改。

在您的查询中,使用 GROUP_CONCAT() :

SELECT brand_id, brand_name, GROUP_CONCAT(linecode) AS codes brands GROUP BY brand_id, brand_name

在 PHP 中,使用 explode()获取不同的代码:

$codes = explode(',', $row['codes']);

注意:我对您的基础表结构做了一些假设。相应地调整查询。

关于php - 通过php在mysql中选择行作为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13689577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com