2017-01-28 14 views
-1

フロントエンドにテーブルを表示しようとしています。アプリケーションは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 | 
+-----------+--------+--------+---------+ 

一人一人の価値は、車のフィールドに表示されます。 valueがnullまたは存在しない場合は、0またはNULL値として表示されます。

手がかりはありますか?

ありがとうございました。

答えて

1

のようなあなたのサーバーからJSONあなたが望むようにテーブルを旋回するようにGROUP BYと組み合わせてSUMを使用することができます。

テーブル/挿入

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) 
; 

クエリ

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 

結果

Person Car 1 Car 2 Car 3 
-------- ------ ------ -------- 
Person 1 1000 2000 0  
Person 2 2200 1100 0  
Person 3 0  0  3000  

参照のデモを作成します。

またはNULLS

クエリ

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 

結果

Person Car 1 Car 2 Car 3 
-------- ------ ------ -------- 
Person 1 1000 2000 (NULL) 
Person 2 2200 1100 (NULL) 
Person 3 (NULL) (NULL) 3000  

はデモhttp://sqlfiddle.com/#!9/65bf69/2

+0

これはまさに私が探していたものです。ありがとうございました!!! – Cristiano

1

戻り

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

] 
+0

グッドを参照してください、しかし、私の問題は、電子だったためそれだけです。テーブル構造を構築するためのクエリ。 – Cristiano

関連する問題