Интересная картинка получилась для статьи ))) Недавно мы рассматривали всемирно известную функцию MySQL RAND() и ее аналог на чистом языке запросов SQL для выборки случайных строк на больших базах.
Функция помогающая mysql_fetch_assoc создать "правильный" массив:
<?
function fetchAll( $queryResult ) {
$data = array();
if( $queryResult ) {
while( $row = mysql_fetch_assoc($queryResult) ) {
$data[] = $row;
}
}
return $data;
}
?>
Функция, которая возвращает необходимое количество строк:
<?
function getRandomRows($howMuch) {
$result = array();
$getIdsQuery = 'SELECT `id` FROM `table`';
$ids = fetchAll( mysql_query( $getIdsQuery ) );
if( $ids ) {
$idsTotal = count($ids);
$howMuch = $howMuch <= $idsTotal ? $howMuch : $idsTotal;
$randomUniqueIndexes = array_rand( $ids, $howMuch );
$randIdsArray = array();
for( $i=0; $i<$howMuch; ++$i ) {
$randIdsArray[] = $ids[ $randomUniqueIndexes[ $i ] ]['id'];
}
$finalQuery = 'SELECT * FROM `table` WHERE `id` IN ('. implode(', ', $randIdsArray) .')';
$result = fetchAll(mysql_query($finalQuery));
}
return $result;
}
?>
Пример использования:
$randArticles = getRandomRows(10);