[pgsql-jp: 38950] SQLでのランダム取得

吉野 康治 yoshino @ moulin.co.jp
2007年 11月 16日 (金) 14:41:05 JST


お世話になります。吉野です。

あるテーブルをランダムで取得して、且つ30件ずつ別ファイルで
Web表示をしようとしております。

現状の処理は、
そのテーブルのカラムに乱数格納用として"random_num"を用意し、
PHPで

$SQL = "SELECT id FROM table_name";
@$res=pg_query($SQL);
@$numrows=pg_numrows($res);
for($i=0;$i<$numrows;$i++){
    $random = rand(0,10000);
    @$row=pg_fetch_array($res,$i,PGSQL_ASSOC);
    $SQL="UPDATE table_name SET random_num'$random' WHERE id='$row[id]'";
    pg_query($SQL);
}

という乱数設定の処理を1時間毎にCronで処理させて
表示側で

ORDER BY table_name.random_num asc LIMIT 31 OFFSET 30*ページ数;

で表示させているのですが、
上記の乱数設定を1時間毎にしているとサーバに負荷が掛かり過ぎてしまいます。
出来ればPHPでの乱数設定の処理はやめたいのですが、
表示側のSQLを
ORDER BY random() LIMIT 31 OFFSET 30*ページ数;
にしてしまうとページ数毎にセッションを別にしているので、
取得されたものが重複してしまい、うまくいきません。

どうにかしてSQL1発で解決する方法はありませんでしょうか?

ご意見お願い致します。




pgsql-jp メーリングリストの案内