テーブルからランダムにデータを取り出す(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),
));
関連記事
-
-
ログインに追加の条件を付与する「scope」
ユーザ登録では、仮登録処理(status=1)から送付したメール内のリンクをクリックしてもらい本登録(status=0)を行ってもらう実装をしました。仮登録の状態ではログインできないように実装するには
-
-
selectボックスを実装
今まで、selectボックスのgroupを作成するのにSet::Combineを使用していましたが、意外と簡単にできることに気付いてしまったので、ご紹介。(自分だけ知らなかったことに気付いた と言った
-
-
Cookieログイン
今回は、ログイン画面でよくみかけるクッキーログインの機能を使ってみます。 CakePHPには、Cookieコンポーネントがあります。(PHPのsetcookieメソッドのラッパー)メソッドはwr
-
-
checkボックスを実装
selectボックスに引き続いてcheckボックスの実装方法をおさらいしてみます。 コードは、CakePHP 2と1.3両方で実装可能です。デモ モデルは、こちらも以下 CREATE TA
-
-
多言語サイト向けに翻訳ファイルを使って翻訳を行う
CakePHPには、翻訳をビヘイビアを使用する方法と翻訳ファイルを使用する方法の2つがあるそうです。(他にもあるのかな?) 今回は、翻訳ファイルを使用して言語の切り替えを行い、その言語設定をCook
-
-
DebugKitを導入
定番のブログチュートリアルをこなして、定番のDebugKitを導入してみました。 2.3からはCakePHPインストール直後に以下のように導入を推奨するような警告メッセージが表示されるようになりまし
-
-
ハッシュ関数の選択とハッシュ化処理
CakePHPでは、ログイン時にはpasswordを自動的にハッシュ化して認証を行ってくれますが、そのパスワードを登録する際は、明示的にハッシュ化する必要があります。 ハッシュ関数の選択 ハッ
-
-
radioボタンを実装
Radioボタンの実装は、セレクトボックスとほぼ同じです。 個人的にはラジオボタンをすすんで使用することは少ないのですが、2択くらいの選択肢であれば非常に便利ですよね。 今回は、その実装方法 デモ
-
-
CSS/JSをひとまとめにして軽量化するプラグイン「Minify plugin for CakePHP」
「Minify plugin for CakePHP」は、インクルードするCSSもしくはJSファイルをひとまとめにしてキャッシュ化してくれるプラグインです。 導入 ダウンロード・解凍し
-
-
RSSフィードの取得
コンロトーラ public function getrssfeed() { try { $newsItems = $this->Rss->read( 'http://
- PREV
- ログイン画面・機能をカスタマイズ
- NEXT
- Js/Cssファイルの読み込みや出力する方法


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