2017-03-01 51 views
0

如何在每個meta_key是列的表中處理meta_key,meta_value對?MySQL Wordpress從meta_value提取數據

背景:我需要爲每次在Learnpress(Wordpress Plugin)中購買的付款方式,數量以及在兩個日期之間付款的用戶獲得付款。

Learnpress將購買內容保存爲帖子,並將每筆購買的屬性保存爲wp_postmeta中的meta_key,meta_value對。如果wp_postmeta曾在不同的列不同的屬性,我可以做這樣的事情:

SELECT attribute1, attribute2, attribute3 FROM wp_postmeta, wp_posts 
WHERE wp_postmeta.post_id = wp_posts.ID; 

然而,每個崗位有wp_postmeta N行,每一行對應一個屬性。數據如何加入,以便我可以得到一個表格,其中一行包含每篇文章的所有屬性?

例子:

wp_post表

ID (Other Columns) 
1 
2 
3 

wp_postmeta table: 
ID post_id meta_key  meta_value 
1  1   user   testuser1 
2  1   payment_method paypal 
3  1   quantity  25 
(Other rows, with the same post_id, one for each attribute of this purchase) 
4  2   user   testuser2 
5  2   payment_method credit_card 
6  2   quantity  50 

Desired Result: 
Post_ID user  payment_method  quantity  (Other attributes) 
1   testuser1 paypal    25 
2   testuser2 credit_card   50 

注:有些職位與他們有比別人更多的相關行postmeta。如果帖子在postmeta中沒有屬性,它應該在最終表中爲null。

這樣的事情可以如何完成? 在此先感謝。

回答

0

例如爲:

DROP TABLE IF EXISTS wp_postmeta; 

CREATE TABLE wp_postmeta 
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
,post_id INT NOT NULL 
,meta_key VARCHAR(30) NOT NULL 
,meta_value VARCHAR(30) NOT NULL 
,UNIQUE(post_id,meta_key) 
); 

INSERT INTO wp_postmeta VALUES 
(1,1,'user','testuser1'), 
(2,1,'payment_method','paypal'), 
(3,1,'quantity',25), 
(4,2,'user','testuser2'), 
(5,2,'payment_method','credit_card'), 
(6,2,'quantity','50'); 

SELECT x.post_id 
    , MAX(CASE WHEN x.meta_key = 'user'   THEN x.meta_value END) user  
    , MAX(CASE WHEN x.meta_key = 'payment_method' THEN x.meta_value END) payment  
    , MAX(CASE WHEN x.meta_key = 'quantity'  THEN x.meta_value END) quantity 
    FROM wp_postmeta x 
GROUP 
    BY post_id; 

+---------+-----------+-------------+----------+ 
| post_id | user  | payment  | quantity | 
+---------+-----------+-------------+----------+ 
|  1 | testuser1 | paypal  | 25  | 
|  2 | testuser2 | credit_card | 50  | 
+---------+-----------+-------------+----------+ 

性能可能會受益,如果你能想出一個辦法,根據數據類型來進行分離值成離散的表。

+0

工程就像一個魅力。我調整了這個查詢來創建一個具有所需meta_key屬性的臨時表,然後將它與其他表連接起來。謝謝! – Raul

+0

@Raul。好。臨時桌子很好,但沒有必要;子查詢也可以工作。 – Strawberry