创建一个结合了MySQL中几个查询结果的结果集?

时间:2012-07-09 16:46:05

标签: php mysql

这是我的场景:我有两个不同的表: 表'subscriptions'包含与订阅用户站点相关的所有信息,以及'rating'表,其中包含订阅站点产品的分数。简化是这样的:

Subscriptions: 'id','user','place','created', etc.
Ratings: 'id','user','product','created',etc.

现在我需要mysql来返回我最近的10个项目,无论是订阅还是评级。到目前为止,找到的解决方案是进行两个不同的调用:

SELECT * FROM subscriptions WHERE ... ORDER BY created LIMIT 10. 

使用两个结果(20个元素),我通过'created'命令多维数组并获得前10个(将结果保存在$ items中):

$items = array_slice($items, 0, 10);

我怀疑这个解决方案效率不高,因为我在两个调用中得到它,并返回比我需要的更多的元素。我一直在读,UNION运算符允许您一次选择多个不同的表,但列数相同。我的问题是,在一次调用中加入由公共字段(在我的情况下创建)排序的不同类型的特定数量元素的最有效方法是什么?可能吗?非常感谢,任何帮助表示赞赏, 赫苏斯。

3 个答案:

答案 0 :(得分:2)

需要UNION。

您可以在此处学习如何使用它:

Join two tables, then Order By date, BUT combining both tables

我在发布的链接中没有解释,但也可以在UNION上设置LIMIT。结合ORDER BY,这就是您所需要的。 (信息Frits van Campen)

(SELECT cols FROM subscriptions) 
UNION 
(SELECT cols FROM ratings);
ORDER BY created LIMIT 10

答案 1 :(得分:1)

修改您的查询以使用UNION来组合结果,一旦结果合并,您可以使用LIMIT方法和ORDER BY将输出限制为所需的记录数。

  

要将ORDER BY或LIMIT应用于单个SELECT,请放置该子句   在括起SELECT的括号内:

另外:

  

使用ORDER BY或LIMIT子句对整个UNION进行排序或限制   结果,括起单个SELECT语句并放置   最后一个之后的ORDER BY或LIMIT。

(SELECT cols FROM subscriptions WHERE ... ORDER BY created LIMIT 10) 
UNION 
(SELECT cols FROM ratings WHERE ... ORDER BY created LIMIT 10);
ORDER BY created LIMIT 10

答案 2 :(得分:1)