Как получить случайные записи из таблицы mysql на php?
перейти к списку всех вопросов
Ответ
Первый способ:
1 2 |
//формируем запрос для получения одной случайной записи из таблицы users $query = "SELECT * FROM users ORDER BY RAND() LIMIT 1"; |
Данный способ применим лишь для небольших объемов данных, так как внутренняя кухня работы такого запроса состоит в создании временной таблицы, в которую помещаются все записи таблицы users с дополнительным полем, сортировки этой таблицы и выборе 1 записи.
Второй способ:
Найдем количество записей $count в таблице с помощью запроса
1 |
$query = "SELECT COUNT(*) FROM users"; |
Получим случайное число от 0 до $count-1 включительно
1 |
$offset=rand(0,$count-1); |
Выбираем случайную запись из таблицы с помощью запроса
1 |
$query="SELECT * FROM users LIMIT {$offset}, 1"; |
Для получения нескольких случайных записей достаточно cгенерировать необходимое количество случайных чисел и объединить запросы вышеуказанного способа с помощью UNION.
1 2 3 4 5 |
$query = array(); while (count($query) < $need_count) { $query[] = '(SELECT * FROM users LIMIT '.rand(0, $count-1).', 1)'; } $query = implode(' UNION ', $query); |
Также можно использовать хранимые процедуры в MySQL.