2014-02-14 68 views
0

在很多程序員的幫助下,我一直在爲這個問題奮鬥了幾天,沒有結果。我有一個表,看起來像這樣:將MySQL結果轉換爲簡單數組的最佳方式是什麼?

meta_id | post_id | meta_key | meta_value 
---------|-----------|------------|------------------- 
46922 | 5923  | adlink | htp://whatever.com 
46923 | 5923  | subloc | Menu Page 
46924 | 5923  | size  | Premium 
46924 | 5923  | location | Washington 
46924 | 5923  | image1 | 5924 
46924 | 5923  | image2 | 5925  
46925 | 5928  | adlink | htp://whatever.com 
46926 | 5928  | subloc | Regular Page 
46927 | 5928  | size  | Standard 
46927 | 5928  | location | Idaho 
46927 | 5928  | image1 | 5926 
46927 | 5928  | image2 | 5927 

我有以下查詢,返回我要找的具體結果,但格式就像表;即許多生成的行具有一些常見的post_id - 我需要創建一個數組或結果表,從中我可以訪問該信息,就好像每個DISTINCT post_id創建一個具有該ID唯一的數據的行,如下所示:

id | adlink   | sublock | size | location | image1 | image2 
-----|--------------------|-------------|---------|------------|----------|--------- 
5923 | htp://whatever.com | Menu Page | Premium | Washington | 5924  | 5925 
5928 | htp://whatever.com | regular Page| Premium | Idaho  | 5926  | 5927 

這裏返回正確的信息查詢:

SELECT * 
    FROM wp_postmeta 
WHERE post_id IN (
        SELECT post_id 
         FROM wp_postmeta 
        WHERE (
           meta_value LIKE '%Washington%' 
          AND meta_key = 'location' 
          ) 
+0

你需要一些SQL-FU。 PHP unnecssary –

回答

4

使用條件聚集轉動你的數據

SELECT post_id, 
     MAX(CASE WHEN meta_key = 'adlink' THEN meta_value END) adlink, 
     MAX(CASE WHEN meta_key = 'sublock' THEN meta_value END) sublock, 
     MAX(CASE WHEN meta_key = 'size'  THEN meta_value END) size, 
     MAX(CASE WHEN meta_key = 'location' THEN meta_value END) location, 
     MAX(CASE WHEN meta_key = 'image1' THEN meta_value END) image1, 
     MAX(CASE WHEN meta_key = 'image2' THEN meta_value END) image2 
    FROM wp_postmeta 
GROUP BY post_id 

輸出:

 
| POST_ID |    ADLINK |  SUBLOCK |  SIZE | LOCATION | IMAGE1 | IMAGE2 | 
|---------|--------------------|--------------|----------|------------|--------|--------| 
| 5923 | htp://whatever.com | Menu Page | Premium | Washington | 5924 | 5925 | 
| 5928 | htp://whatever.com | Regular Page | Standard |  Idaho | 5926 | 5927 | 

這裏是SQLFiddle演示

+0

謝謝!這是PERECT! –

+0

你很受歡迎。祝你好運:) – peterm

0

可以在PHP代碼構建結果表。與此相似:

$result[$row["post_id"]][$row["meta_key"]] = $row["meta_value"]; 

凡$行 - 是一列從myssql導致

+0

我希望找到一個比建立一個獨特的post_id表更簡單的解決方案,然後迭代通過其他尋找獨特的ID來做到這一點... –

相關問題