这可能是一件非常简单的事情。查看下面的正常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()');
答案 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()'));