3

これは非常に単純なことかもしれません。以下の通常のSQLクエリを確認してください

(shopping_id desc limit 5によるショッピング注文から*を選択)RAND()による注文

このクエリはmysqlで正常に実行されます(これが正しい方法かどうかはわかりません)が、機能します。ショッピングテーブルから最後の5つのIDを取得し、毎回ランダムに注文します

Zendでこれを達成したいと思います。最初の部分を実行してからRAND句を結果に適用する方法がわかりません-以下にあるものはそれを行いません。

$ select = $ this-> select()       
           -> from(array('sh' =>'shopping'))
           -> order('shopping_id desc')
           -> limit(5)    
           -> order('RAND()');
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 に答える