2012-11-05 92 views
0

在下表中,基於post_id字段,元鍵logo_IDshow_logo相互關聯。如何獲得值爲logo_ID的行有show_logo1使用只有mysql如何根據另一行中另一個字段的值顯示一行?

post_id meta_key  meta_value 
------- ----------- ---------- 
262  logo_ID  263  
262  show_logo 0   
260  logo_ID  261  
260  show_logo 1   
258  logo_ID  259  
258  show_logo 1   

如果它看起來很熟悉,那是因爲這是從WP postmeta表。我使用$wpdb來查詢分貝,所以一切都必須在MySQL(任何地方沒有WP功能)。

+0

你使用SQL或wordpress函數嗎? – doublesharp

+0

對不起,這只是純粹的MySQL。 – enchance

回答

2

你可以加入wp_postmeta表本身,指定你的WHERE子句中所需的值。

SELECT pm2.post_id, pm2.meta_key 
FROM wp_postmeta pm1 
JOIN wp_postmeta pm2 
    ON pm2.post_id = pm1.post_id AND pm2.meta_key = 'logo_ID' 
WHERE pm1.meta_key = 'show_logo' AND pm1.meta_value = 1 

如果你正在處理大量的數據,這是相當快的,因爲它會用在wp_postmeta表索引。如果您想獲得其他值作爲條件,或者wp_posts表可以獲得其他帖子字段,您可以更多地使用JOINwp_postmeta

SQL Fiddle

1

使用基於meta_key的值的CASE聲明來旋轉行,因此您可以在一行中顯示post_id的值,然後將其包裝在子查詢中。

SELECT * 
FROM 
(
    SELECT post_id, 
      MAX(CASE WHEN meta_key = 'logo_ID' THEN meta_value ELSE NULL END) logo_ID, 
      MAX(CASE WHEN meta_key = 'show_logo' THEN meta_value ELSE NULL END) show_logo 
    FROM tableName 
    GROUP BY post_ID 
) a 
WHERE show_logo = 1 
+0

將表加入自身以利用索引不是更好嗎? – doublesharp

相關問題