Forum Webscript.Ru

Программирование => PHP => Тема начата: golden-den от 16 Ноября 2003, 20:43:06

Название: случайная выборка из базы
Отправлено: golden-den от 16 Ноября 2003, 20:43:06
в таблице 2 поля id, text
делаю выборку всего из этой таблицы.
А затем надо выбрать из этого массива n случайных значений, да ещё и инфу знать об id

как лучше сделать это, используя средства работы с массивами.
У меня получалось только так:

n=3
1. запрос. select id from table
2. нахожу максимальный id
2. нахожу 3 случайных числа не равных друг другу в диапозоне от 1 до max_of_id
3. ещё 3 запроса типа select * from table where id=$i

может это можно сделать за один запрос к базе?
Название: случайная выборка из базы
Отправлено: Меняздесьдавнонет от 16 Ноября 2003, 21:21:15
а из базы значения удаляются?
Название: случайная выборка из базы
Отправлено: golden-den от 16 Ноября 2003, 22:09:35
да нет, всё гораздо проще.
еще одно подтверждение фразы "Все гениальное просто".
Да мануал надо чаще да внимательнее читать.
выход сам нашел почти сразу.
select * from table where sh=1 order by rand()

получаются сортированные в случайном порядке значения, которые удовлетворяют нужным условиям, да и та конструкция громоздкая не нужна.
Название: случайная выборка из базы
Отправлено: Меняздесьдавнонет от 16 Ноября 2003, 22:27:38
Ну, не сказать, чтобы проще.
на тему ордер бай ранд тут много было сказано...

Но на небольших таблицах - самое оно.

А с выборкой максимального - понял свою ошибку?
Название: случайная выборка из базы
Отправлено: golden-den от 17 Ноября 2003, 00:39:28
Цитировать
А с выборкой максимального - понял свою ошибку?

нет, подскажи, если не трудно.
Наверное тоже с помощью mysql запроса. где-то в мануале было вроде
Название: случайная выборка из базы
Отправлено: Меняздесьдавнонет от 17 Ноября 2003, 07:06:40
о господи.
да, с помощью запроса.
очень сложного.
select max(id) from table
но я имел в виду не это.

в реальной базе 3 запроса типа select * from table where id=$i
могут тебе не вернуть никаких записей.
к id, КАК К ЧИСЛУ, вообще не надо привязываться. это не число. это бирка, привязаная к пальцу.
если тебе надо выбрать в морге три случайных трупа, ты не смотришь номера на бирках. там вообше может не быть номеров.
Название: случайная выборка из базы
Отправлено: golden-den от 17 Ноября 2003, 09:12:47
да, яркое светлое жизнерадостное описание.
Здорово.

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

не реагируй так эмоционально. Не все знают то, чт ты знаешь... и наоборот
Название: случайная выборка из базы
Отправлено: Меняздесьдавнонет от 17 Ноября 2003, 10:16:47
Я сам разберусь, как мне реагировать.
Я реагирую на то, что читаю, а не на то, что ты имел в виду
Написано - три селекта - я и понимаю это, как три, а не больше.
Написано - берем максимальный ид - я и понимаю это так, что ты ид используешь как номер. И объясняю, что так делать не надо.

Лимит-то ты хоть используешь в своих запросах?