आप फ़ंक्शन को तालिका में त्वरित रूप से सारगर्भित कर सकते हैं - कौन जानता है कि यह किस एडॉप्टर का उपयोग कर रहा है:
class MyTable extends Zend_Db_Table_Abstract {
public function randomSelect($select=null) {
if ($select === null) $select = $this->select();
if (!$select instanceOf Zend_Db_Select) $select = $this->select($select);
$adapter = $this->getAdapter();
if ($adapter instanceOf Zend_Db_Adapter_Mysqli) {
$select->order(new Zend_Db_Expr('RAND()'));
} else if ($adapter instanceOf Zend_Db_Adapter_Dblib) {
$select->order(new Zend_Db_Expr('NEWID()'));
} else {
throw new Exception('Unknown adapter in MyTable');
}
return $select;
}
}
$someSelect = $table->select();
// add it to an existing select
$table->randomSelect($someSelect);
// or create one from scratch
$select = $table->randomSelect();
साथ ही, मुझे कहीं न कहीं एक लेख मिला, जिसे मैंने खो दिया था, जिसमें कुछ इस तरह की कोशिश करने की सिफारिश की गई थी:
$select->order(new Zend_Db_Expr('0*`id`+RAND()));
MSSQL के क्वेरी ऑप्टिमाइज़र को हटाने के लिए और प्रत्येक पंक्ति के लिए एक नए मान की गणना करने के लिए इसे चकमा दें।