ランダムに複数の抽出結果を取得する
CakePHP2で、
‘order’ => ‘rand()’
として検索結果をランダム取得しようとしていたが、生成されたSELECT文には
ORDER BY rand() ASC
と指定されていて、更にEXPLAINで調べてみたところ、見事にExtraの項目に、
Using where; Using temporary; Using file sort
と表示されてしまった。そこで、
「SELECT文ではランダム指定せず、SELECT文の取得結果からランダムでデータを取得」
という方針に変更。
$results = データ取得メソッド(); $resultsNum = count($results); $keys = range(0, $resultsNum-1); shuffle($keys); $wantedArray = array(); // 必要な件数が3の場合 $i = 0; foreach ($keys as $key) { if ($i == 3) break; $wantedArray[] = $results[$keys[$i]]; $i++; }