2011-07-14 47 views
0
$q_auctions = Doctrine_Query::create() 
     ->select('COUNT(t.id) AS num_items') 
     ->from('Auctions t') 
     ->where('t.ends_at > NOW()'); 

    $q_auctions_upcoming = Doctrine_Query::create() 
     ->select('COUNT(t.id) AS num_upcoming') 
     ->from('Auctions t') 
     ->where('t.starts_at > NOW()'); 

    $q_auctions_closed = Doctrine_Query::create() 
     ->select('COUNT(t.id) AS num_closed') 
     ->from('Auctions t') 
     ->where('t.ends_at < NOW()'); 

我在教条中有这3个非常类似的拍卖,但我不确定我是否可以以某种方式缩短它。我不太喜欢这么重复,所以也许如果有人能给我一个小费。是否可以缩短这些原则查询?

回答

1

首先,我不担心三个查询太多,除非你真的想减少这个页面的查询总数。 starts_at和ends_at上的索引可能有助于加快速度,但取决于这些表中的记录数。

现在唯一想到的就是做一个查询,返回开始日期和结束日期,然后将PHP foreach循环中的那些内容解析为需要的三个组。这会将查询从3降到1,但会增加一些PHP开销。如果您有数百或数千次拍卖,这可能不是一个好主意。

+0

其实没有,最多30个网页拍卖。那么,如果我用PHP做了它会更好吗? – Tool

+1

@Tool:重要的是数据库中最终会有多少次拍卖,因为您将返回* all *拍卖的开始/结束日期。 30是好的,但是一年后会有300次关闭拍卖,几年后会有3000次?在不了解应用程序的情况下,我想我只是保留查询。 – Tom