Случайная выборка из базы данных
Очень часто в работе программиста требуется вывести что-то случайное, чтобы это постоянно менялось от запуска к запуску. Например, вывести случайную статью, вывести случайную цитату, вывести случайные комментарии и многое другое. В этой статье мы с Вами разберём случайную выборку из базы данных.
В основе лежит команда сортировки (ORDER), и мы можем сделать так, чтобы сортировка была случайной. Это создаёт видимость случайной выборки. Вот пример запроса, который извлекает случайные записи:
SELECT * FROM `table` ORDER BY RAND()
Такой запрос вытащит все записи из таблицы и перемешает их случайным образом. На практике это нужно редко. Гораздо чаще нужно выводить именно определённое число записей:
SELECT * FROM `table` ORDER BY RAND() LIMIT 5
И данный запрос уже имеет практическую пользу, так как он позволяет вывести 5 случайных записей. Можно так вывести, например, 5 случайных изображений на страницу.
Очень часто требуется вытащить не просто случайные записи, но чтобы они удовлетворяли какому-либо условию:
SELECT * FROM `table` WHERE `id` > 5 ORDER BY RAND() LIMIT 5
Данный запрос вытащит 5 случайных записей, у которых id больше 5. Вот так делается случайная выборка из базы данных.
-
- Михаил Русаков
Комментарии (15):
почему вы не используете pdo для работы с базой данных?
Ответить
Не люблю иметь дела ни с какими сторонними расширениями.
Ответить
Здравствуйте, Михаил я сделал все так-же но у меня не получается. ошибок нет я 5 раз проверял подскажите с чем это связано?
Ответить
Если не получается, ошибок не может не быть. Может проблема не в самом запросе, а в таблице, с которой Вы пытаетесь работать.
Ответить
вот вам Михаил мой сайт http://dfiles.ru/files/r35om683r исправьте код пожалуйста везде где ошибки еще мой e-mail: [email protected]. таблицу проверил нет не в этом ошибка
Ответить
Не получается составить запрос, который выберет из базы (таблицы) 5 СЛУЧАЙНЫХ записей, но обязательно НАЧИНАЯ С id5 или так, чтобы id5 обязательно попал в эту выборку! Спасибо.
Ответить
Здравствуйте, Александр, попробуйте так: SELECT * FROM `table` WHERE `id` > 5 ORDER BY RAND() LIMIT 5
Ответить
здравствуйте!ставлю LIMIT 5 ,все равно выходит одна запись,и выборка всех записей неполучается. правильный ли код: function getAllVideolink() { $mysqli = connectDB(); $result_set = $mysqli->query("SELECT * FROM `video`ORDER BY RAND() LIMIT 5"); closeDB($mysqli); return resultToArray($result_set); }
Ответить
может эти записи вывожу не правильно: <?php $vlink = getAllVideolink(); foreach ($vlink as $key => $row) { $link = $row['link']; $id = $row['id']; } echo '<ul class="blok">'.$link.'</ul>'; ?>
Ответить
в поле id ставлю unsinsed, prymeri,auto_inscrement
Ответить
не опечатались? может auto_inCrement ?
Ответить
что за ORDER BY RAND() ? Limit делает лимит вывода на количество записей из колонки по порядку,учитывая предыдущие условия выборки или сортировки т.е. ORDER BY RAND() он не поймёт,если у вас нет колонки rand в таблице,и соответственно не поймёт limit 5
Ответить
ошибка найдена.echo было вне цикла
Ответить
Спасибо большое за этот урок, но решив проблему с рендером из базы данных я столкнулся с новой, у меня теперь стоит мне нажать кнопку что бы передать значение и запустить код внутри, $result=mysql_query(' SELECT * FROM `wp_options` ORDER BY RAND()'); вновь обращается к базе данных и меняет значение, как будто- я перезагрузил страницу, хотя , я его об этом не прошу. Кто подскажет, что делать?
Ответить
Михаил когда искал случайную выборку из базы данных то прочитал не мало форумах и много где говорят что ORDER BY RAND() рабочий вариант но очень тормознутный ... то есть если в БД будет к примеру 100000 строк то сервак задумается ... Почему Вы выбрали именно ORDER BY RAND() ?
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.