テーブルからランダムにデータを取り出す(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),
));
関連記事
-
-
HttpSocketを使用してリクエスト送信
CakePHPには、Webサービスへのリクエスト送信のためのHttpSocketクラスが用意されています。 HttpSocket get HTTP GETリクエストを発行します。デモ H
-
-
ログローテーション
CakePHP 2.xではbootstrap.php内にあらかじめアプリケーションログの設定が書かれています。2.xで日付ごとにログファイルが切り替わるよう設定してみました。 日ごとにログを切り替え
-
-
Blowfishを使用してハッシュ化する
使用方法 Blowfishを採用してハッシュ化を行う場合、Securityクラスのhashメソッドを呼び出します。第2引数に'blowfish'を指定し、第3引数を指定しないもしくはfalseにしま
-
-
hasOne アソシエーション
hasOneアソシエーションはテーブル間で1つのレコードに対して他のテーブルに紐付くレコードが1つの場合にjoinする場合に使用します。 CakePHPのドキュメントにならってUserモデルとP
-
-
Markdown Plugin
「Markdown CakePHP Plugin」は、MarkDown書式をレンダリングしてくれるビューヘルパーです。MarkDownについて勉強しているうちに出会ったので試し打ちです。 ダウンロー
-
-
(メール・URL・電話・郵便・IP) データ バリデーション
今回は、プロフィール情報に使用されるデータに絞ったバリデーションルールです。 バリデーションルール 以下の5つのバリデーションルールがコアに用意されています。 email メールアドレス
-
-
Formヘルパーのinputタグのdiv/labelなどの設定
Formヘルパーのinputではデフォルトでは以下のようにdivで囲われて、labelが付与されて出力されます。 CSSのフレームワークなどであらかじめ決まったスタイルがある場合に便利に作られていま
-
-
パス定数と変更方法やURLの取得
CakePHPは基本的にはディレクトリそのまま配置することで構築が可能ではありますが、設定パスを変更することでセキュリティに考慮した構成にすることや運用性をもたせたものにすることが可能になります。
-
-
多言語サイト向けに翻訳ファイルを使って翻訳を行う
CakePHPには、翻訳をビヘイビアを使用する方法と翻訳ファイルを使用する方法の2つがあるそうです。(他にもあるのかな?) 今回は、翻訳ファイルを使用して言語の切り替えを行い、その言語設定をCook
-
-
selectボックスを実装
今まで、selectボックスのgroupを作成するのにSet::Combineを使用していましたが、意外と簡単にできることに気付いてしまったので、ご紹介。(自分だけ知らなかったことに気付いた と言った
- PREV
- ログイン画面・機能をカスタマイズ
- NEXT
- Js/Cssファイルの読み込みや出力する方法


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