2016-11-19 66 views
1

OK我要去嘗試是明確的,因爲我可以,但我忍受 - 它是一個漫長的一週:)MySQL的 - 從表中獲取相關的值

我們有一個結構類似於如下表:

+----+----------+---------+------------------+ 
| id | field_id | user_id |  value  | 
+----+----------+---------+------------------+ 
| 1 | Country |  2 | USA    | 
| 2 | Country |  3 | USA    | 
| 3 | Country |  4 | CA    | 
| 4 | Country |  5 | MX    | 
| 5 | Province |  2 | FL    | 
| 6 | Province |  3 | GA    | 
| 7 | Province |  4 | British Columbia | 
| 8 | Province |  5 | Sonara   | 
| 9 | City  |  2 | Orlando   | 
| 10 | City  |  3 | Brunswick  | 
| 11 | City  |  4 | Vancouver  | 
| 12 | City  |  5 | Nogalas   | 
+----+----------+---------+------------------+` 

,我們需要(希望)查詢返回的所有國家 - 州/省 - 市組合爲動態生成一個JSON文件的目的。

某事的

"SELECT all Provinces and Cities WHERE Country = 'USA'" 

(當然,與我們的數據庫表結構的影響 - 不幸的是不能改變 - 其相當多的複雜

任何的共享「user_id」的值可以安全地假定爲「一起」(即user_id 2的「USA」爲「Country」,「FL」爲「Province」,「Orlando」爲「City」)。

我們試圖創建一個類似於下面的json文件的最終結果。

{ 
"USA": { 
    "Florida": [ 
     {"City": "Orlando"}, 
     {"City": "Palm Beach"} 
    ], 
    "Georgia": [ 
     {"City": "Atlanta"}, 
     {"City": "Brunswick"} 
    ] 
}, 
"Canada": { 
    "Alberta": [ 
     {"City": "Calgary"} 
    ], 
    "Ontario": [ 
     {"City": "Atlanta"}, 
     {"City": "Brunswick"} 
    ] 
} 
} 
+1

通過張貼你的表,你正在被儘可能明確完全相反的圖像。請將表格作爲文本以及一些示例行作爲文本 – e4c5

+0

好點,e4c5。一秒... – user2614806

+0

編輯我原來的問題,刪除圖像,並添加表結構作爲代碼。 – user2614806

回答

0

有了這個查詢和一些循環的結果,你應該能夠生成您的JSON,只要你想

SQL Fiddle

的MySQL 5.6架構設置

CREATE TABLE t 
    (`id` int, `field_id` varchar(8), `user_id` int, `value` varchar(16)) 
; 

INSERT INTO t 
    (`id`, `field_id`, `user_id`, `value`) 
VALUES 
    (1, 'Country', 2, 'USA'), 
    (2, 'Country', 3, 'USA'), 
    (3, 'Country', 4, 'CA'), 
    (4, 'Country', 5, 'MX'), 
    (5, 'Province', 2, 'FL'), 
    (6, 'Province', 3, 'GA'), 
    (7, 'Province', 4, 'British Columbia'), 
    (8, 'Province', 5, 'Sonara'), 
    (9, 'City', 2, 'Orlando'), 
    (10, 'City', 3, 'Brunswick'), 
    (11, 'City', 4, 'Vancouver'), 
    (12, 'City', 5, 'Nogalas') 
; 

查詢1

SELECT 
    tc.`value` as Country, 
    tp.`value` as Province, 
    tcy.`value` as City 
FROM (
     SELECT `value`, user_id FROM t WHERE field_id = "Country" 
    ) as tc 
    LEFT JOIN (
      SELECT `value`, user_id FROM t WHERE field_id = "Province" 
     ) as tp 
     ON tc.user_id = tp.user_id 
    LEFT JOIN (
      SELECT `value`, user_id FROM t WHERE field_id = "City" 
     ) as tcy 
     ON tp.user_id = tcy.user_id 

Results

|Country|   Province |  City | 
|-------|------------------|-----------| 
| USA |    FL | Orlando | 
| USA |    GA | Brunswick | 
| CA | British Columbia | Vancouver | 
| MX |   Sonara | Nogalas | 
+0

這實際上......輝煌。謝謝! – user2614806

+0

@ user2614806不客氣! ;順便說一句,如果你想每個城市只有一條線(2個用戶或同一城市的更多),你可以切換'SELECT'爲'SELECT DISTINCT' – Blag

+0

我似乎無法得到DISTINCT方面的工作在這個查詢。無論我在哪裏放置DISTINCT,我仍然會得到重複的內容。我希望能夠做的是調整查詢返回不同的國家或省份或國家,具體取決於我放置DISTINCT的位置。 – user2614806

相關問題