SQLでランダムに抽出
ランダムに20件のデータを抽出するには
SELECT * FROM {table名} ORDER BY RAND() LIMIT 20;
で書ける。
ランダム関数はMySQLではRAND()でPostgresではRANDOM()で書ける。
けど先輩に聞いた話だと、SQLのランダムは遅いらしいので、普通にPHPなどにランダムを書いてそれを実行した方がいいらしいです。
追記
調べたら * を使っているのがRAND()の遅い原因らしい。
MySQLでSQLのみを使用してランダム取得を劇的に早くする方法 - 僕のススメ。