2011-08-31 87 views
1

这是很难解释什么exatly我想要做的,所以继承人的查询媒体链接的作品:Subselects或更优雅?

SELECT 
(SELECT COUNT(cars) '. HUGE_FROM_LIST .' '. HUGE_WHERE_QUERY .' AND cars > 0) AS cars, 
(SELECT COUNT(houses) '. HUGE_FROM_LIST .' '. HUGE_WHERE_QUERY .' AND houses_type = 8) AS houses8, 
... 

这样,我得到两个结果,告诉我许多汽车和类型8的房子怎么有。我不会为每个结果做一个查询,所以我尝试了子查询。

我做了子查询,所以单个查询只取决于他们自己的WHERES。 问题是HUGE_FROM_LIST和HUGE_WHERE_QUERY每次都会重复,整个事情变得非常大。

有没有更优雅的东西?

+0

是,打入两个查询和计算标准,方法执行速度更快 – ajreal

+0

是啊,那不是真的一个更优雅的方式我搜索 – Mike

回答

1
SELECT 
    COUNT(IF(cars > 0, TRUE, NULL)) AS cars, 
    COUNT(IF(houses_type = 8, TRUE, NULL)) AS houses8, 
    ... 
'. HUGE_FROM_LIST .' 
'. HUGE_WHERE_QUERY 
+0

伙计,这个接缝工作。将测试它并报告结果... – Mike

0

我不知道为什么你不想做多个查询,但不管你怎么做......如果你有SELECT准则(逻辑),将在许多不同的地方重复,那么它可能是将该逻辑封装到单个视图中是一个好主意。然后,您可以在需要使用该逻辑获取该数据时简单地引用该视图。

+0

我应该提到的是,我不能在这里使用的意见。此查询是diffenten查询的一部分,这些查询在某些ajax刷新时触发。所以我想让这个平滑,因为会有很多的Ajax调用。如果它不能被浓缩/优化,那么我将不得不忍受它。 – Mike

+0

为什么它是不同的查询的一部分折扣使用的意见? –

+0

它没有。但我不能使用它们。 – Mike