Это код, который я использую в нашем приложении для решения проблем с производительностью, и он тестируется для того, чтобы работать быстрее, чем order by rand()
:
$ids = mysql::getSingleColumn("select id from table where simple_where_clause = 'value'");
$limit = 3;
for ($i = 0;$i<$limit;$i++) {
$r = rand( 0, count( $ids ) );
if (isset($ids[$r])) {
$usedIds[] = $ids[$r];
unset($ids[$r]);
} else {
$i--;
}
}
$idClause = implode(',',$usedIds);
Затем я использую $ idClause в основном запросе:[...] WHERE id in ({$idClause})