2012-07-21 59 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

相关问题