sql >> データベース >  >> RDS >> Mysql

Zend_Db_Selectの順序をランダムに選択し、mssql/mysqlと互換性があります

    関数をテーブルにすばやく抽象化できます-使用しているアダプタを知っている人:

    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のクエリオプティマイザを破壊し、それをだまして各行の新しい値を計算させます。



    1. mysqlに対応する結果がない場合でもカウントを取得するにはどうすればよいですか?

    2. cPanelでデータベースを削除する方法

    3. SQL Serverのvarchar列から奇妙な文字(帽子をかぶったA)を削除します

    4. MAMPMysqlエラー-ログを開くことができませんでした