テーブルからランダムにデータを取り出す(find)
CakePHPでテーブルから特定件数のレコードをランダムに取得するには以下のように指定するとできます。
$this->data = $this->Bulkdata->find( 'all', array(
'order' => 'rand()', // ORDER BY RAND()
'limit' => 5 // 5件取得
));
件数が多い場合は、フィールドを指定するとその分処理が速くなります。
$this->data = $this->Bulkdata->find( 'all', array(
'fields' => array( 'data'), // dataカラムのみ取得
'order' => 'rand()',
'limit' => 5
));
大量レコードの場合
ORDER BY RAND()では、全件取得してから、それをランダムに並べ替えます。
レコード件数増になるつれ、徐々にクエリに時間がかかるようになります。
その対処としては、まずインデックスされたカラムからランダムに取得し、それをキーに必要件数分のみ取得するようにすると処理が速くなります。
// ランダムなidを必要件数取得
$ids = $this->Bulkdata->find( 'list', array(
'fields' => 'id',
'order' => 'RAND()',
'limit' => 5)
);
// 取得したidで条件検索
$this->data = $this->Bulkdata->find( 'all', array(
'fields' => array(
'Bulkdata.data'
),
'conditions' => array( 'Bulkdata.id' => $ids),
));
関連記事
-
-
FormヘルパーのMagicOption (マジックオプション)
Formヘルパーでは、「フィールド名」,「テーブルカラムのデータ型」もしくはモデルの「バリデーション設定」によりフォーム要素を決定したり、自動で属性を付与する「マジックオプション」と呼ばれるものがある
-
-
CSS/JSをひとまとめにして軽量化するプラグイン「Minify plugin for CakePHP」
「Minify plugin for CakePHP」は、インクルードするCSSもしくはJSファイルをひとまとめにしてキャッシュ化してくれるプラグインです。 導入 ダウンロード・解凍し
-
-
checkボックスを実装
selectボックスに引き続いてcheckボックスの実装方法をおさらいしてみます。 コードは、CakePHP 2と1.3両方で実装可能です。デモ モデルは、こちらも以下 CREATE TA
-
-
CakePHP インストール時エラーの対処
CakePHPインストール時に出くわすであろうエラーの原因と対処方法についてまとめてみました。前提として、WebサーバはApache、データベースはMySQLとしています。 Timezone未設
-
-
数値系バリデーション
CakePHP 2になっていくつか数値用バリデーションルールが追加されています。 数値用 (コア)バリデーション decimal - 十進数であること numeric - 数値であること
-
-
パス定数と変更方法やURLの取得
CakePHPは基本的にはディレクトリそのまま配置することで構築が可能ではありますが、設定パスを変更することでセキュリティに考慮した構成にすることや運用性をもたせたものにすることが可能になります。
-
-
SQLクエリーをログに出力する
SQLのクエリーをデバッグするには、Debug Kitを使用すればできますが、デバッグログと一緒に出したいのでやり方を調査してみました。 別々のログやビューでみるのもいいですが、秒単位で実行される処
-
-
アップロードファイルのバリデーションルール
CakePHP 2.2や2.3になってファイルアップロードに対するルールがコアバリデーションに追加されているようで、まとめてみました。 コアバリデーション 関連しそうなルールは以下の4つの
-
-
Formヘルパーのinputタグのdiv/labelなどの設定
Formヘルパーのinputではデフォルトでは以下のようにdivで囲われて、labelが付与されて出力されます。 CSSのフレームワークなどであらかじめ決まったスタイルがある場合に便利に作られていま
-
-
Js/Cssファイルの読み込みや出力する方法
CakePHPのHTMLヘルパーにはjsファイルやcssファイルを読み込むためのメソッドが用意されています。ファイルを読み込むのに加えて、出力先を複数指定できるようになっています。 また、インライン
- PREV
- ログイン画面・機能をカスタマイズ
- NEXT
- Js/Cssファイルの読み込みや出力する方法


Comment
[…] されたカラムからランダムに取得し、それをキーに必要件数分のみ取得するようにすると処理が速くなります。 [紹介元] CakePHP 2.x – テーブルからランダムにデータを取り出す(find) […]