Выбрать случайные записи из БД при помощи php

Выбрать случайные записи из БД при помощи php

Все программисты рано или поздно сталкиваются с mysql в php. Запросы в БД могут быть различными от фильтрации по датам на сайт до полной выгрузки данных. Казалось бы, с последним нет никаких сложностей, пока не появляется задача выбрать из БД несколько случайных записей.

Предположим, нам требуется выбрать 5 случайных записей из БД. Это можно легко сделать такой командой:

SELECT * FROM tovari ORDER BY RAND() LIMIT 5;

Но так делать ни в коем случае нельзя! Эта строка запроса выглядит очень короткой и код сработает. Но если в вашей базе 10000 записей, то запрос будет создавать временную таблицу, затем перебирать все эти записи и сортировать по первым 5 совпадениям. Если БД у вас большая. то запрос будет занимать много времени.

Поэтому придется написать более сложный код на php, который будет делать всего 5 запросов к БД, вместо прохода по всей структуре, тем самым существенно снижая нагрузку на сервер.

<?php
$r_count = 5;
$r_count_tovari = mysql_num_rows(mysql_query("select * from tovari"));
for($r_i = 0; $r_i < $r_count; $r_i++) {
$r_id_tovari = rand(1, $r_count_tovari);
$r_podresult = mysql_query("select * from tovari limit ".$r_id_tovari.",1");
while ($r_podrow=mysql_fetch_array($r_podresult)) {
echo $r_podrow['name'].'<br>';
} }
?>

Этот код сначала определяет максимальное значение числа записей в БД ($r_count_tovari). Далее начинается for цикл вывода случайных записей. В нем определяется id рэндомной записи от 1 до максимального значения числа записей в БД. Затем while циклом выбираются уже заранее определенные рэндомные записи по их id.

Число рэндомных записей можно менять переменной $r_count.

Несмотря на то, что этот код уже не будет загружать ваш сервер, у него есть недостаток. Он может несколько раз вывести одну и туже запись, если рэндомное число при новых циклах будет совпадать. Вероятность этого тем выше, чем меньше число записей в БД. Решить проблему можно разными путями. Например, добавлять id-ки в массив и отсортировать его по уникальным значениям. Затем использовать этот массив для вывода записей.

| | Выбрать случайные записи из БД при помощи php | Все программисты рано или поздно сталкиваются с mysql в php. Запросы в БД могут быть различными от фильтрации по датам на сайт до полной выгрузки данн | http://blogprogram.ru/wp-content/uploads/2017/11/845-131x131.jpg

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>