Php 动态查询分组特定字段
我想在前端显示一张桌子。应用程序是用AngularJS和PHP以及MySQL编写的 我的桌子是这样的: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
+-----------+--------+--------+
| 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
请参见演示这正是我想要的。非常感谢。很好,但我的问题就是这样。用于构建表结构的查询。