このコードを Kohana3 フレームワークで機能させるにはどうすればよいですか? 構文に問題があります。
ORM::factory('table1')
->where ( 'id', '=', ceil( DB::expr('rand()') * [SELECT max(id) from table1] ) )
->find();
それが、テーブルからランダムな行を選択する方法です。
これは小さなテーブル (1000 行以上を含む) では問題なく動作しますが、大きなテーブルではうまくいきません:
ORM::factory('table1')
->order_by(DB::expr('RAND()'))
->find();
私が望むものに相当する標準のmysqlは、次のようなものです。
SELECT name
FROM table1 JOIN
(SELECT CEIL(RAND() *
(SELECT MAX(id)
FROM table1)) AS id
) AS r2
USING (id);
では、それを Kohana3 フレームワークの作業コードに変換するにはどうすればよいでしょうか?
PS この方法は、テーブルに穴がない場合 (削除された行がない場合) に正常に機能し、私の場合は問題ありません。