Автор Тема: случайная выборка из базы  (Прочитано 3524 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн golden-den

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 118
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kosmos13.narod.ru
случайная выборка из базы
« : 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

может это можно сделать за один запрос к базе?

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
случайная выборка из базы
« Ответ #1 : 16 Ноября 2003, 21:21:15 »
а из базы значения удаляются?

Оффлайн golden-den

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 118
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kosmos13.narod.ru
случайная выборка из базы
« Ответ #2 : 16 Ноября 2003, 22:09:35 »
да нет, всё гораздо проще.
еще одно подтверждение фразы "Все гениальное просто".
Да мануал надо чаще да внимательнее читать.
выход сам нашел почти сразу.
select * from table where sh=1 order by rand()

получаются сортированные в случайном порядке значения, которые удовлетворяют нужным условиям, да и та конструкция громоздкая не нужна.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
случайная выборка из базы
« Ответ #3 : 16 Ноября 2003, 22:27:38 »
Ну, не сказать, чтобы проще.
на тему ордер бай ранд тут много было сказано...

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

А с выборкой максимального - понял свою ошибку?

Оффлайн golden-den

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 118
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kosmos13.narod.ru
случайная выборка из базы
« Ответ #4 : 17 Ноября 2003, 00:39:28 »
Цитировать
А с выборкой максимального - понял свою ошибку?

нет, подскажи, если не трудно.
Наверное тоже с помощью mysql запроса. где-то в мануале было вроде

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
случайная выборка из базы
« Ответ #5 : 17 Ноября 2003, 07:06:40 »
о господи.
да, с помощью запроса.
очень сложного.
select max(id) from table
но я имел в виду не это.

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

Оффлайн golden-den

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 118
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kosmos13.narod.ru
случайная выборка из базы
« Ответ #6 : 17 Ноября 2003, 09:12:47 »
да, яркое светлое жизнерадостное описание.
Здорово.

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

не реагируй так эмоционально. Не все знают то, чт ты знаешь... и наоборот

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
случайная выборка из базы
« Ответ #7 : 17 Ноября 2003, 10:16:47 »
Я сам разберусь, как мне реагировать.
Я реагирую на то, что читаю, а не на то, что ты имел в виду
Написано - три селекта - я и понимаю это, как три, а не больше.
Написано - берем максимальный ид - я и понимаю это так, что ты ид используешь как номер. И объясняю, что так делать не надо.

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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28