Forum Webscript.Ru
Программирование => PHP => Тема начата: 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
может это можно сделать за один запрос к базе?
-
а из базы значения удаляются?
-
да нет, всё гораздо проще.
еще одно подтверждение фразы "Все гениальное просто".
Да мануал надо чаще да внимательнее читать.
выход сам нашел почти сразу.
select * from table where sh=1 order by rand()
получаются сортированные в случайном порядке значения, которые удовлетворяют нужным условиям, да и та конструкция громоздкая не нужна.
-
Ну, не сказать, чтобы проще.
на тему ордер бай ранд тут много было сказано...
Но на небольших таблицах - самое оно.
А с выборкой максимального - понял свою ошибку?
-
А с выборкой максимального - понял свою ошибку?
нет, подскажи, если не трудно.
Наверное тоже с помощью mysql запроса. где-то в мануале было вроде
-
о господи.
да, с помощью запроса.
очень сложного.
select max(id) from table
но я имел в виду не это.
в реальной базе 3 запроса типа select * from table where id=$i
могут тебе не вернуть никаких записей.
к id, КАК К ЧИСЛУ, вообще не надо привязываться. это не число. это бирка, привязаная к пальцу.
если тебе надо выбрать в морге три случайных трупа, ты не смотришь номера на бирках. там вообше может не быть номеров.
-
да, яркое светлое жизнерадостное описание.
Здорово.
Но с этой проблемой я не сталкивался - я проверял конечно же, чтобы ен были результаты пустым.
не реагируй так эмоционально. Не все знают то, чт ты знаешь... и наоборот
-
Я сам разберусь, как мне реагировать.
Я реагирую на то, что читаю, а не на то, что ты имел в виду
Написано - три селекта - я и понимаю это, как три, а не больше.
Написано - берем максимальный ид - я и понимаю это так, что ты ид используешь как номер. И объясняю, что так делать не надо.
Лимит-то ты хоть используешь в своих запросах?