Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zend_Db_Wybierz kolejność losowo, kompatybilna w mssql / mysql

Możesz szybko wydzielić funkcję do tabeli - kto wie, jakiego adaptera używa:

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

Znalazłem też artykuł, który zgubiłem, a który zalecał wypróbowanie czegoś takiego:

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

aby obalić optymalizator zapytań MSSQL i nakłonić go do obliczenia nowej wartości dla każdego wiersza.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego liczność indeksu w MySQL pozostaje niezmieniona po dodaniu nowego indeksu?

  2. Tabela SQL z wpisem na liście vs tabela SQL z wierszem dla każdego wpisu

  3. Czy istnieje jakikolwiek limit ciągu rozdzielanego przecinkami w find_in_set w zapytaniu mysql?

  4. jak mogę zmodyfikować klucz obcy?

  5. Jak wybrać konkretnego klienta?