Zend Framework - 在嵌套查询上应用order by

时间:2010-03-24 16:44:27

标签: zend-framework zend-db-table

这可能是一件非常简单的事情。查看下面的正常SQL查询

(select * from shopping order by shopping_id desc limit 5) order by RAND()

此查询在mysql中成功运行 - 不确定这是否是正确的方法 - 但它有效。它从购物表中获取最后5个ID,并且每次都随机订购

我想在Zend中实现这一目标。我不确定如何执行第一部分,然后将RAND子句应用于结果 - 我在下面的内容不会这样做。

$select = $this->select()       
           ->from(array('sh'=>'shopping'))
           ->order('shopping_id desc')
           ->limit(5)    
           ->order('RAND()');

2 个答案:

答案 0 :(得分:2)

为什么不采取稍微不同的方法来实现相同的结果。如果删除子选择和order by RAND(),您可以非常快速地从数据库中获取行,那么当您使用行时,您可以随机对它们进行随机化。

$select = $this->select()       
       ->from(array('sh'=>'shopping'))
       ->order('shopping_id desc')
       ->limit(5)    

$rows = $this->fetchAll($select);

// take it from a rowset object, convert to an array:
$rowArray = array();
foreach ($rows as $row) $rowArray[] = $row;
shuffle($rowArray);

答案 1 :(得分:1)

Zend_Db_Expr类允许您这样做。您创建了一个Zend_Db_Expr类的新实例,并使用其构造函数将表达式作为字符串传递:“RANDOM()”。

$ select = $ this-> select()
            - >从(阵列( 'SH'=> '购物'))             - >订单('shopping_id desc')             - >极限(5)
            - > order(new Zend_Db_Expr('RANDOM()'));