Отправить заявку

MYSQL - выборка случайных строк при помощи php

Интересная картинка получилась для статьи ))) Недавно мы рассматривали всемирно известную функцию 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);
Другие публикации