2011-07-14 5 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つの非常によく似たオークションをDoctrineに持っていますが、私はそれをどうにか短縮することはできません。誰かが私にチップを与えることができたら多分繰り返すのが好きではない。これらの教義クエリを短縮することは可能ですか?

答えて

1

まず、このページのクエリの総数を減らそうとしていない限り、3つのクエリをあまりにも多く気にする必要はありません。 starts_atおよびends_atの索引は、処理速度を向上させるのに役立ちますが、それらの表のレコード数に依存します。

今すぐ気になるのは、単一のクエリを実行し、開始日と終了日を返し、必要な3つのグループにPHP foreachループ内のものを解析することだけです。これはクエリを3から1に落としますが、PHPのオーバーヘッドを追加します。オークションが何百、何千もある場合は、これは良い考えではないかもしれません。

+0

実際には、ページに最大30件のオークションがあります。 PHPでそれをやった方が良いでしょうか? – Tool

+1

@Tool:重要なことは、* all *オークションの開始日/終了日をPHPに返すので、最終的にデータベースにオークションがいくつあるかということです。 30は問題ありませんが、1年後に300件のオークションが、2,3年後に3000件のオークションが行われますか?アプリについてもっと知ることなく、私はただ質問を残しておくと思う。 – Tom