Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 动态查询分组特定字段_Php_Mysql_Angularjs - Fatal编程技术网

Php 动态查询分组特定字段

Php 动态查询分组特定字段,php,mysql,angularjs,Php,Mysql,Angularjs,我想在前端显示一张桌子。应用程序是用AngularJS和PHP以及MySQL编写的 我的桌子是这样的: +-----------+--------+--------+ | id_person | id_car | value | +-----------+--------+--------+ | 1 | 1 | 1000 | | 1 | 2 | 2000 | | 2 | 1 | 2200 | | 2

我想在前端显示一张桌子。应用程序是用AngularJS和PHP以及MySQL编写的

我的桌子是这样的:

+-----------+--------+--------+
| id_person | id_car | value  |
+-----------+--------+--------+
| 1         |   1    |   1000 |
| 1         |   2    |   2000 |
| 2         |   1    |   2200 |
| 2         |   2    |   1100 |
| 3         |   3    |   3000 |
+-----------+--------+--------+
我需要以以下格式在前端显示表格:

+-----------+--------+--------+---------+
|           | Car 1  | Car 2  |  Car 3  |
+-----------+--------+--------+---------|
| Person 1  |  1000  |   2000 |    0    |
| Person 2  |  2200  |   1100 |    0    |
| Person 3  |   0    |   0    |  3000   |
+-----------+--------+--------+---------+
每个人的值将出现在汽车的字段中。 如果值为null或不存在,则它将显示0或为null值

有什么线索吗


谢谢。

从服务器返回JSON,如

[
{
  "person": {"id":1, "name":"Sam"},
  "cars": [
    {"id":1, "name":"Ford", "value": 1000},
    {"id":1, "name":"Audi", "value": 1200}
  ]
},
//....

]

您可以将SUM与GROUP BY结合使用,以根据需要透视表

创建表格/插入

CREATE TABLE cars
    (`id_person` INT, `id_car` INT, `value` INT)
;

INSERT INTO cars
    (`id_person`, `id_car`, `value`)
VALUES
    (1, 1, 1000),
    (1, 2, 2000),
    (2, 1, 2200),
    (2, 2, 1100),
    (3, 3, 3000)
;
Person    Car 1   Car 2   Car 3   
--------  ------  ------  --------
Person 1  1000    2000    0       
Person 2  2200    1100    0       
Person 3  0       0       3000    
Person    Car 1   Car 2   Car 3   
--------  ------  ------  --------
Person 1  1000    2000    (NULL)  
Person 2  2200    1100    (NULL)  
Person 3  (NULL)  (NULL)  3000    
查询

SELECT 
   CONCAT('Person ', cars.id_person) "Person"
 , SUM(CASE WHEN cars.id_car = 1 THEN cars.value ELSE 0 END) "Car 1"
 , SUM(CASE WHEN cars.id_car = 2 THEN cars.value ELSE 0 END) "Car 2"
 , SUM(CASE WHEN cars.id_car = 3 THEN cars.value ELSE 0 END) "Car 3"
FROM
 cars
GROUP BY
 cars.id_person 
ORDER BY
 cars.id_person ASC
SELECT 
   CONCAT('Person ', cars.id_person) "Person"
 , SUM(CASE WHEN cars.id_car = 1 THEN cars.value ELSE NULL END) "Car 1"
 , SUM(CASE WHEN cars.id_car = 2 THEN cars.value ELSE NULL END) "Car 2"
 , SUM(CASE WHEN cars.id_car = 3 THEN cars.value ELSE NULL END) "Car 3"
FROM
 cars
GROUP BY
 cars.id_person 
ORDER BY
 cars.id_person ASC
结果

CREATE TABLE cars
    (`id_person` INT, `id_car` INT, `value` INT)
;

INSERT INTO cars
    (`id_person`, `id_car`, `value`)
VALUES
    (1, 1, 1000),
    (1, 2, 2000),
    (2, 1, 2200),
    (2, 2, 1100),
    (3, 3, 3000)
;
Person    Car 1   Car 2   Car 3   
--------  ------  ------  --------
Person 1  1000    2000    0       
Person 2  2200    1100    0       
Person 3  0       0       3000    
Person    Car 1   Car 2   Car 3   
--------  ------  ------  --------
Person 1  1000    2000    (NULL)  
Person 2  2200    1100    (NULL)  
Person 3  (NULL)  (NULL)  3000    
见演示

或为空

查询

SELECT 
   CONCAT('Person ', cars.id_person) "Person"
 , SUM(CASE WHEN cars.id_car = 1 THEN cars.value ELSE 0 END) "Car 1"
 , SUM(CASE WHEN cars.id_car = 2 THEN cars.value ELSE 0 END) "Car 2"
 , SUM(CASE WHEN cars.id_car = 3 THEN cars.value ELSE 0 END) "Car 3"
FROM
 cars
GROUP BY
 cars.id_person 
ORDER BY
 cars.id_person ASC
SELECT 
   CONCAT('Person ', cars.id_person) "Person"
 , SUM(CASE WHEN cars.id_car = 1 THEN cars.value ELSE NULL END) "Car 1"
 , SUM(CASE WHEN cars.id_car = 2 THEN cars.value ELSE NULL END) "Car 2"
 , SUM(CASE WHEN cars.id_car = 3 THEN cars.value ELSE NULL END) "Car 3"
FROM
 cars
GROUP BY
 cars.id_person 
ORDER BY
 cars.id_person ASC
结果

CREATE TABLE cars
    (`id_person` INT, `id_car` INT, `value` INT)
;

INSERT INTO cars
    (`id_person`, `id_car`, `value`)
VALUES
    (1, 1, 1000),
    (1, 2, 2000),
    (2, 1, 2200),
    (2, 2, 1100),
    (3, 3, 3000)
;
Person    Car 1   Car 2   Car 3   
--------  ------  ------  --------
Person 1  1000    2000    0       
Person 2  2200    1100    0       
Person 3  0       0       3000    
Person    Car 1   Car 2   Car 3   
--------  ------  ------  --------
Person 1  1000    2000    (NULL)  
Person 2  2200    1100    (NULL)  
Person 3  (NULL)  (NULL)  3000    

请参见演示

这正是我想要的。非常感谢。很好,但我的问题就是这样。用于构建表结构的查询。