$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()');
我在Doctrine里有3个非常相似的拍卖,但我不确定我能不能缩短它。我不喜欢重复这么多,所以也许有人能给我点小费。
首先,我不会担心这三个查询太多,除非你真的想减少这个页面的查询总数。starts_at和ends_at上的索引可能有助于加快速度,但这取决于这些表中的记录数量。
现在想到的唯一一件事就是执行一个查询,返回开始和结束日期,然后在PHP foreach循环中将它们解析为所需的三组。这将使查询从3个减少到1个,但增加了一些PHP开销。如果你有成百上千的拍卖,这可能不是一个好主意。