2012-09-18 79 views
3

使用wordpress數據庫,我們有wp_options和wp_postmeta等表格。 這些按主鍵ID分組,然後是'option_name'和'option_value'等字段;如何將三個MySQL查詢合併爲一個?

因此,例如找出三個值我需要做3個不同的查詢。

有沒有一種適當的方法,只用一個查詢就可以做到這一切?

請在此闡明一些情況,並分享正確的方式來做到這一點。

SELECT option_value FROM bdlocal_wrdp1.wp_options WHERE option_name='siteurl'; 

SELECT option_value FROM bdlocal_wrdp1.wp_options WHERE option_name='blogname'; 

SELECT option_value FROM bdlocal_wrdp1.wp_options WHERE option_name='blogdescription'; 

(返回example.com,例博客,這是一個例子博客。)

回答

7
SELECT option_name, 
     option_value 
    FROM bdlocal_wrdp1.wp_options 
WHERE option_name IN ('siteurl', 'blogname', 'blogdescription') 

而這個查詢執行後,你就會有3對option_name + option_value值。

+0

感謝zerkms!這比我之前做的更好。 – jaggedsoft

3

你可以你爲這個IN條款,

SELECT option_value 
FROM bdlocal_wrdp1.wp_options 
WHERE option_name IN ('siteurl','blogname','blogdescription') 
+0

要知道哪個值屬於哪個選項將會很棘手 – zerkms

1
select (case when option_name='siteurl' then option_value else 0 end) as 'siteurl', 
    (case when option_name='blogname' then option_value else 0 end) as 'blogname', 
    (case when option_name='blogdescription' then option_value else 0 end) as 'blogdescription' from bdlocal_wrdp1.wp_options 
0

你也可以使用一個MySQL的聯盟此功能:

select option_name,option_value from wp_options where option_name='siteurl' UNION ALL 
select option_name,option_value from wp_options where option_name='blogname' UNION ALL 
select option_name,option_value from wp_options where option_name='blogdescription'; 

你可以閱讀更多關於一些例子的工會here.

+0

爲什麼選擇'IN'選項?您的解決方案保證速度更慢,3倍,更難以閱讀。 – zerkms

+0

那麼,只有數百萬條記錄的表格對於這樣一個簡單的查詢來說沒有任何意義。如果你檢查了查詢計劃,你會看到這個查詢做更多的工作。你已經檢查過查詢計劃了嗎?結果是什麼?如果不是 - 您的假設(?)是基於什麼? – zerkms

+0

「問題是我們必須對錶中的每個option_name運行此檢查。」 ---那肯定是錯的。 – zerkms