SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 23.01.2013 20:12:30

olga.cherko
Участник
Зарегистрирован: 01.01.2013
Сообщений: 4

Помогите выбрать случайную запись из таблицы

Задача следующая - из таблицы нужно вывести случайную запись, но не из всех, имеющихся в наличии, а только из удовлетворяющих определенным условиям. Как я понимаю, логика должна быть следующей: 1) выбираем id записей, отвечающих необходимым условиям 2) загоняем отобранные id в массив 3)из массива с помощью array_rand выбираем случайный id 4)выводим запись с этим id. Если это правильный ход рассуждений, то как это реализовать на php? Собственно, я знаю, как сделать все, кроме 2-го шага, т.е. как создать массив.

Вот, например, этот кусок кода выводит все нужные мне id:

$query_result = mysql_query("SELECT `id` FROM `video` WHERE to_show=`1`");

$result_array=mysql_fetch_assoc($query_result);

while($result_array=mysql_fetch_assoc($query_result))
{echo '<p>';
echo $result_array["id"];}


Как теперь вместо того, чтобы вывести id, сделать из них массив $random_id_array, чтобы потом можно было сделать:

$random_id = array_rand($random_id_array, 1);


Если есть более простой и правильный путь для реализации поставленной задачи - подскажите, пожалуйста.

Неактивен

 

#2 23.01.2013 20:17:11

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Помогите выбрать случайную запись из таблицы

Топорное решение

SELECT `id` FROM `video` WHERE to_show=1 ORDER BY RAND() LIMIT 1;


См. также обсуждение http://sqlinfo.ru/forum/viewtopic.php?id=4388

Неактивен

 

#3 23.01.2013 20:36:33

olga.cherko
Участник
Зарегистрирован: 01.01.2013
Сообщений: 4

Re: Помогите выбрать случайную запись из таблицы

Я прочитала, что при большом количестве записей на обработку таких запросов уходит очень много времени, поэтому сразу решила сделать как-то более правильно из принципиальных соображений. У меня вряд ли в этой таблице когда-нибудь появится больше пары сотен записей, но вдруг...

Неактивен

 

#4 23.01.2013 20:45:01

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Помогите выбрать случайную запись из таблицы

Если только SELECT id (а не SELECT *) и только пара сотен записей, то это оптимальное решение. Преждевременная оптимизация - корень всех зол.

Если записей будет много, то нужно их посчитать (SELECT count(*) from `video` WHERE `to_show`=1) - скажем их N. Затем сгенерировать целое случайное число M от 0 до N-1. Затем выбрать одно число на m-м месте.

SELECT `id` FROM `video` WHERE `to_show`=1 ORDER BY id LIMIT m,1;


Это решение не факт, что всегда будет быстрее и в нем легко ошибиться так, что некоторые никогда не будут выпадать.

Неактивен

 

#5 23.01.2013 20:59:16

olga.cherko
Участник
Зарегистрирован: 01.01.2013
Сообщений: 4

Re: Помогите выбрать случайную запись из таблицы

Ok, спасибо!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson