2012-01-02 34 views
1

我有兩個表:如何從兩個表中獲取數據作爲一行

_____________________________ 
| wp_post  | wp_postmeta | 
|______________|_____________| 
| ID   | meta_id  | 
| post_title | post_id  | 
| post_content | meta_key | 
| guid   | meta_value | 
|______________|_____________| 

wp_postmeta表包含這些行:

| meta_id | post_id | meta_key  | meta_value 
|---------|---------|-----------------|--------------- 
| 310  | 156  | level   | Blue 
| 311  | 156  |_post_main_intro | Some text 

我想要的結果是:

post_title, post_content, meta_value as color, meta_value as main_intro 

我試過不同的連接,但我不能很好地修復它。

SELECT a.post_title, b.meta_key, b.meta_value 
FROM wp_posts a 
LEFT JOIN wp_postmeta b ON a.ID = b.post_id 
WHERE b.meta_key = 'level' 

但是,這並不讓我去取_post_main_intro數據:

我得到這是接近。

我會很高興,如果有人能在正確的方向:)

更新
我目前的解決辦法是這樣的推我(和它的作品)

SELECT a.id, a.post_title, b.meta_value as color, c.meta_value as post_intro 
FROM wp_posts a 
LEFT JOIN wp_postmeta b ON a.ID = b.post_id 
LEFT JOIN wp_postmeta c ON a.ID = c.post_id 
WHERE b.meta_key = 'level' 
AND c.meta_key = '_post_main_intro' 

這是thew去哪裏?

+1

沒有在哪裏b.meta_key ='_post_main_intro'工作..! – 2012-01-02 10:13:59

+0

您是否在尋找數據透視表?看到這個鏈接http://datacharmer.org/downloads/pivot_tables_mysql_5.pdf – Pavan 2012-01-02 10:13:59

+0

@Sudhir他希望水平和_post_main_intro在一行^^ – 2012-01-02 10:22:09

回答

2

您需要的元表兩次查詢:

SELECT a.post_title, b.meta_key, b.meta_value as level, c.meta_value as intro 
FROM wp_posts a 
LEFT JOIN wp_postmeta b ON a.ID = b.post_id 
LEFT JOIN wp_postmeta c ON a.ID = c.post_id 
WHERE b.meta_key = 'level' 
AND c.meta_key = '_post_main_intro' 

編輯:忘記在這列

+0

是的,這就是我最終使用的。我不確定這是否是最好的解決方案。但它的作品:) – Steven 2012-01-02 10:25:26

0

嘗試:

 

SELECT a.post_title, b.meta_key, b.meta_value 
FROM wp_posts a 
LEFT JOIN wp_postmeta b ON (a.ID = b.post_id) 
WHERE b.meta_key = 'level' OR b.meta_key = '_post_main_intro' 
 
+0

好吧,這可能有幫助 – 2012-01-02 10:27:46

0

第三個表,因爲你已經限制搜索到'級別'

WHERE b.meta_key = 'level' 

只要刪除該部分,它應該給你所有

相關問題