【cakePHP】データベースからランダムにデータを取得する

cakePHPもさわり続けてたので、そろそろなれてきました。
さて、cakePHPでデータベースからデータをランダムに取得したいことってありますよね?
僕自身、学習用の問題のランダム出題をやりたくて、データ取得した後にshuffle()とか使ってやりくりしてましたが、MySQLのrand()とかでできたらラクだなーとか思って調べてみたらありました。


やり方はとっても簡単!

findのorderにrand()を入れるだけ。

<?php
$db_data = $this->Model->find(
	'all',
	array(
		'order' => 'rand()'
	)
);
?>

これでランダムな順番でデータが取得できちゃいます。

し・か・もrand()にはseedが設定できていつでも同じ順番でデータを取得することもできちゃいます。
seedに設定する値はinteger(整数)です。

<?php
$seed = 5555;
$db_data = $this->Model->find(
	'all',
	array(
		'order' => 'rand((' .$seed .'))'
	)
);
?>

ちなみにrand()にseedを設定する時は(())というように括弧を二重にしないと値がクォートでくくられてしまいエラーとなるので注意しましょう。

ぼくは普段、mt_rand()などで乱数を生成して、Sessionに書き込み、それをseedとして利用しています。
こうすることで、Sessionが有効な間はランダムの順番が固定されます。

<?php
$seed = mt_rand(10000,99999);
$this->Session->write('random_seed',$seed);
$db_data = $this->Model->find(
	'all',
	array(
		'order' => 'rand((' .$seed .'))'
	)
);
?>

こんな感じ。
ランダムもこうやって気軽に使えるとwebアプリの処理の幅も広がりますね。

  1. コメント 0

  1. トラックバック 0

CAPTCHA


return top