2013-02-13 87 views
0

我有一個sql查詢,但需要數據庫中的顯式數據。MySQL中的SQL子查詢

我已經上演了每個查詢,以獲取我需要的數據。

SELECT wp_posts.id, 
     wp_posts.post_title, 
     wp_postmeta.meta_key, 
     wp_postmeta.meta_value 
FROM wp_postmeta 
     LEFT JOIN wp_posts 
       ON wp_postmeta.post_id = wp_posts.id 
WHERE wp_posts.post_type = 'bolton' 
     AND wp_postmeta.meta_key IN ('address', 'age', 'cricket_club', 
            'training_times', 
            'location', 'player_type', 'coach') 

有了這個聲明,它將每行都返回到地址,年齡,cricket_club。

我需要它雖然獲取地址行的值,而不是meta_value行列出它們全部。

任何意見表示讚賞。

繼續。

我涉獵了一些代碼:

SELECT post_id 
FROM wp_postmeta 
WHERE post_id = (
SELECT max(post_id) 
FROM wp_postmeta) 

不過,我想是這樣的。

SELECT address 
FROM meta_value 
WHERE wp_post_meta.meta_key = address 

感謝

+0

你可以發表表格結構,樣品數據和所需的結果嗎? – 2013-02-13 17:16:33

回答

1

我有懷疑,要逆轉置您的數據,即將不同的數據片段放入不同的列。 (我也懷疑,在兩種情況下,當你說在你的問題,你實際上意味着,但是這可能只是我的。)

如果unpivot的是你真的什麼後,那麼你可以試試下面的方法:

SELECT 
    p.id, 
    p.post_title, 
    MAX(CASE pm.meta_key WHEN 'address'  THEN pm.meta_value END) AS address, 
    MAX(CASE pm.meta_key WHEN 'age'   THEN pm.meta_value END) AS age, 
    MAX(CASE pm.meta_key WHEN 'cricket_club' THEN pm.meta_value END) AS cricket_club, 
    MAX(CASE pm.meta_key WHEN 'training_times' THEN pm.meta_value END) AS training_times, 
    MAX(CASE pm.meta_key WHEN 'location'  THEN pm.meta_value END) AS location, 
    MAX(CASE pm.meta_key WHEN 'player_type' THEN pm.meta_value END) AS player_type, 
    MAX(CASE pm.meta_key WHEN 'coach'   THEN pm.meta_value END) AS coach 
FROM wp_postmeta pm 
INNER JOIN wp_posts p ON pm.post_id = p.id 
WHERE p.post_type = 'bolton' 
    AND pm.meta_key IN ('address', 'age', 'cricket_club', 
         'training_times', 
         'location', 'player_type', 'coach') 
GROUP BY 
    p.id, 
    p.post_title 
; 

有兩點要注意:

  1. 我換成你留下一個INNER JOIN JOIN因爲wp_posts.type = 'bolton'條件在W HERE子句具有基本相同的效果。如果你真的想要一個左連接存在,那麼也許你需要的條件移動到ON子句,像這樣:

    ... 
    FROM wp_postmeta pm 
    INNER JOIN wp_posts p ON pm.post_id = p.id 
            AND p.post_type = 'bolton' 
    WHERE pm.meta_key IN (... 
    ... 
    

    但我不知道,你應該看到自己。

  2. 其他WHERE條件wp_postmeta.meta_key IN (...)在此查詢中不是必需的,儘管查詢將讀取所有元鍵,但它只會返回SELECT子句中定義列的那些元素。

    離開條件可能會使查詢效率更高,但是擴展列列表(如果您需要擴展它)會稍微不方便:您必須同時擴展條件和SELECT條款。

    因此,在性能方面離開條件可能是有益的,並且在維護方面去除它可能更好。當表格中的行數不多時,性能上的差異應該可以忽略不計,但對於您的情況是否會如此,您需要通過測試來確定。然而,一般的方法可能首先採用更簡單的解決方案,並僅在出現問題時進行優化。

0

難道你們就不能只是改變

wp_postmeta.meta_key IN ('address','age',... 

wp_postmeta.meta_key = 'address'; 
+0

嗨,我需要所有的字段,地址,年齡,cricket_club被拉,但作爲獨立的而不是作爲第一選擇塊 – 2013-02-13 16:47:51