2012-07-21 57 views
0

嗨,我知道基本的MySQL查詢格式,但現在我需要做一些複雜的查詢。 說(爲解釋的目的) 我有3分表用柱IDITEM_NAME,和no_of_views。 我想單個查詢從這3個表中獲得前10個查看項目。單個MySQL查詢從不同視圖獲取不同表格的結果

Table1 

id:  item_name  no_of_views 
1   item1    20 
2   item2    25 
3   item3    16 
4   item4    10 

Table2 

id:  item_name  no_of_views 
1   itemA    2 
2   itemB    5 
3   itemC    70 
4   itemD    0 

Table3 

id:  item_name  no_of_views 
1   item_1    34 
2   item_2    55 
3   item_3    10 
4   item_4    1 

我知道我必須加入這些表,然後查詢基於no_of意見

$query=" 
(SELECT * FROM Table2) 
UNION ALL 
(SELECT * FROM Table2) 
UNION ALL 
(SELECT * FROM Table2) 
ORDER by no_of _views DESC LIMIT 10"; 

這工作完全正常,但我的問題是我的表中有項100在其中我有很多表,如果這是我做的方式查詢將不得不從所有的表中得到所有的結果,然後給我只有前10個意見,

我想做的它喜歡根據沒有意見從所有表中選擇10個值 就像說我有10個表,並且每個表都有一個no_of_views,我如何查詢以查看哪個項目在所有表中具有最高視圖,然後再從另一個表中降低no_of_views或者同一張桌子,這是真的,等等。 是甚至可能的。

請建議。

+0

「F這是我的方式做到這一點的查詢必須從所有表得到的所有結果,然後給我的只有排名前10位的觀點」 - 這是這樣一個查詢的主要問題 - SQL引擎在查看所有這些視圖之前無法知道前十個視圖是什麼。 – 2012-07-21 06:18:22

回答

2

將您的查詢與以下查詢進行比較時,MySQL執行計劃完全相同。優化器仍然只會從每個表(不是全部記錄集)中選擇前10位,然後將它們進行比較,因爲這是它所需要的最大值。這種方法並不像你認爲的那樣低效。

$query=" 
(SELECT * FROM Table1 ORDER BY no_of_views DESC LIMIT 10) 
UNION ALL 
(SELECT * FROM Table2 ORDER BY no_of_views DESC LIMIT 10) 
UNION ALL 
(SELECT * FROM Table3 ORDER BY no_of_views DESC LIMIT 10) 
ORDER by no_of _views DESC LIMIT 10"; 
+0

亞我知道我必須這樣去。 – 2012-07-21 07:37:56

相關問題