3

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

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

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

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

$select = $this->select()       
           ->从(数组('sh'=>'购物'))
           ->order('shopping_id desc')
           ->限制(5)    
           ->订单('兰德()');
4

2 回答 2

3

为什么不采取稍微不同的方法来获得相同的结果。如果您删除子选择并且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);
于 2010-03-24T20:33:51.317 回答
1

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

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

于 2010-03-29T09:36:18.783 回答