sql >> Databáze >  >> RDS >> Mysql

Zend_Db_Select pořadí náhodně, kompatibilní v mssql / mysql

Funkci můžete rychle abstrahovat do tabulky – kdo ví, který adaptér používá:

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();

Také jsem někde našel článek, který jsem ztratil a který doporučoval zkusit něco jako:

$select->order(new Zend_Db_Expr('0*`id`+RAND()));

podvrhnout optimalizátor dotazů MSSQL a oklamat jej, aby vypočítal novou hodnotu pro každý řádek.



  1. Jak vytvořit vnořenou tabulku pomocí uživatelsky definovaného datového typu v databázi Oracle

  2. Jak změnit časové pásmo serveru MySQL?

  3. Jak vybrat ze dvou tabulek v MySQL, i když ne všechny řádky v jedné tabulce mají korespondenty ve druhé?

  4. Jak pracovat s datovými funkcemi v Oracle sql