2009-11-01 92 views
0

有時我覺得我沒有得到編程的大腦力量,我只是無法讓我的頭在這個。複雜的MySQL查詢爲Wordpress

我有一個表叫wp_postmeta它看起來有點像這個

+-----------+-----------+------------+--------------+ 
| meta_id | post_id | meta_key | meta_value | 
+-----------+-----------+------------+--------------+ 
| 1  |  1  | type  | movie  | 
+-----------+-----------+------------+--------------+ 
| 2  |  1  | name  | dark knight | 
+-----------+-----------+------------+--------------+ 
| 3  |  2  | type | tv show | 
+-----------+-----------+------------+--------------+ 
| 4  |  2  | name | lost  | 
+-----------+-----------+------------+--------------+ 
| 5  |  3  | type | tv show | 
+-----------+-----------+------------+--------------+ 
| 6  |  3  | name  | house  | 
+-----------+-----------+------------+--------------+ 
| 7  |  4  | type  | movie  | 
+-----------+-----------+------------+--------------+ 
| 8  |  4  | name  | godfather | 
+-----------+-----------+------------+--------------+ 

我想要做的是選擇的所有電影。我需要找到WHERE meta_key ='type'AND meta_value ='電影',然後獲得meta_key「name」,post_id匹配並選擇meta_value,從而給我「黑暗騎士」和「教父」。

不好意思的解釋,但WordPress沒有邏輯結構的數據庫的這部分,使得它很難解釋。

回答

3
select pm2.meta_value as movie_name 
    from wp_postmeta as pm1 join wp_postmeta as pm2 
    on pm1.post_id = pm2.post_id 
    where pm1.meta_key = 'type' and pm1.meta_value = 'movie' and 
    pm2.meta_key = 'name' 
+0

加入讓我頭疼,謝謝。 – 2009-11-01 14:50:06

0
SELECT meta_value FROM wp_postmeta WHERE meta_key = 'name' AND post_id IN 
    (SELECT post_id FROM wp_postmeta 
    WHERE meta_key = 'type' AND meta_value = 'movie'); 
0
SELECT b.meta_value as movie 
FROM wp_postmeta a 
LEFT JOIN wp_postmeta b ON (a.post_id = b.post_id) 
WHERE a.meta_key = 'type' 
    AND a.meta_value = 'movie' 
    AND b.meta_key = 'name'; 
+0

爲什麼'LEFT JOIN'而不是'JOIN'?有區別嗎? – 2009-11-01 13:07:48

+0

我在我自己的代碼中使用了LEFT JOIN,這樣我就可以檢查返回的數據,這個查詢就是我所期望的,並且對於查找孤立數據也是有用的,也就是說,該帖子是電影,但名稱鍵沒有設置或已被刪除。在這種情況下,JOIN或LEFT JOIN是合適的。 – 2009-11-01 13:21:21

0

這裏的Amyam的,其中加入隱含的輕微變形。我很久以前就這樣學習了,所以它可能是老式的方式:

select pm2.meta_value as movie_name 
from wp_postmeta pm1, wp_postmeta pm2 
where pm1.post_id = pm2.post_id AND 
     pm1.meta_key = 'type' AND pm1.meta_value = 'movie' AND 
     pm2.meta_key = 'name'; 
+0

舊但完美;) – 2009-11-01 14:17:58