你好,我试图成功地选择行作为mysql中的列。在mysql中通过php选择行作为列
也许有人可以帮助我。
这是我的表看起来像
+----------+----------------------------------------------------+----------+
| 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语句,但是我不知道如何去做。
如果是的话,出现这种情况,我会很感激
感谢您的宝贵时间任何人都可以更新我的查询。
为什么不使用GROUP_CONCAT将所有代码作为一个数组存储在一个字段中? – didierc