Автор Тема: Выбрать 1 случайную запись.  (Прочитано 8724 раз)

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

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

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Выбрать 1 случайную запись.
« Ответ #15 : 20 Августа 2002, 18:10:25 »
Боже!
И ЭТО он называет НЕ корявым.
В этом мире что-то не так.

Саша.
Сделай так
$num=mt_rand(1, mysql_result(mysql_query("SELECT count(*) FROM anek"), 0));
$text_anek=mysql_result(mysql_query("SELECT anek FROM anek LIMIT $num,1), 0);
И избавь свою базу от грубого надругательства, извращенец.

(я оставлю за скобками, как ты будешь привязывать, к примеру голосование, к дропнутым id)

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Выбрать 1 случайную запись.
« Ответ #16 : 20 Августа 2002, 18:28:18 »
Цитировать
SELECT anek FROM anek ORDER BY RAND() LIMIT 1
Но мне кажется это коряво

А чего здесь корявого? :)
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

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

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Выбрать 1 случайную запись.
« Ответ #17 : 20 Августа 2002, 18:44:50 »
AlieN
Не коряво, но работает действительно, медленно.
У меня 0,1 сек на базе в 500 записей исполнялся запрос.
А приведенные выше - 0,00

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Выбрать 1 случайную запись.
« Ответ #18 : 21 Августа 2002, 08:14:16 »
Цитировать
$num=mt_rand(1, mysql_result(mysql_query("SELECT count(*) FROM anek"), 0));
$text_anek=mysql_result(mysql_query("SELECT anek FROM anek LIMIT $num,1), 0);

Ну я так-то в своих рассуждениях над этим и остановился.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн rembo

  • Больной
  • Постоялец
  • ***
  • Сообщений: 219
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.v4.ru
Выбрать 1 случайную запись.
« Ответ #19 : 28 Августа 2002, 06:19:58 »
В данном случае по моему RomikChef прав
Цитировать
И как можно называть кривой конструкцию, которая была специально именно для таких случаев, введена в язык?

А это я вычитал в документации к мускулу:

     In MySQL Version 3.23, you can, however, do: `SELECT *
     FROM table_name ORDER BY RAND()\'

     This is useful to get a random sample of a set `SELECT * FROM
     table1,table2 WHERE a=b AND c
переводить надеюсь не надо.

Цитировать
Не коряво, но работает действительно, медленно.


А это смотря насколько часто приходится выполняеть такой запрос
Ведь конце концов за рандомить можно какое-нить целочисленное поле (id например) раз сортировка тратит столько времени. Хотя в базе аналогичного размера никакой разницы во времени исполнения я не заметил. В разных случаях колеблется от 0.00 до 0.02 на древнем селероне - разве это так важно.
« Последнее редактирование: 28 Августа 2002, 06:37:09 от rembo »
программист должен все сделать так, чтоб потом ничего не делать

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Выбрать 1 случайную запись.
« Ответ #20 : 28 Августа 2002, 09:24:45 »
Цитировать
колеблется от 0.00 до 0.02 на древнем селероне - разве это так важно.

Ес-но. А если у тя таких запросов будет много?
Нахрена базу нагружать.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Tronyx

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 826
  • +0/-0
  • 2
    • Просмотр профиля
Выбрать 1 случайную запись.
« Ответ #21 : 28 Августа 2002, 10:29:03 »
Цитировать
Ес-но. А если у тя таких запросов будет много?
Нахрена базу нагружать.

А что мне делать? Вот мой запрос: "SELECT text FROM anek ORDER BY RAND() LIMIT 10" (так я достаю 10 случайных анекдотов), НО у меня значения id (авто_инкрементное поле) могут содержать "пробелы" и БД большая, думаю около 1500-2000 записей, так что вариант с двумя запросами мне не подходит...
С уважением, Владимир Гончаренко - COPI# 93
Ролевая онлайн игра

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Выбрать 1 случайную запись.
« Ответ #22 : 28 Августа 2002, 10:58:10 »
Если анекдоты удаляешь не часто, то может стоит подумать, как говорит RomikChef, над грубым надругательством, т.е. делать ALTER. Значительно, повысит эффективность, однако, если у тя id\'шник где-нть завязан, напр., голосование, то этот вариант сразу отпадает.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Antoxa

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 64
  • +0/-0
  • 0
    • Просмотр профиля
Выбрать 1 случайную запись.
« Ответ #23 : 04 Сентября 2002, 13:14:35 »
Цитировать
А что мне делать? Вот мой запрос: "SELECT text FROM anek ORDER BY RAND() LIMIT 10" (так я достаю 10 случайных анекдотов), НО у меня значения id (авто_инкрементное поле) могут содержать "пробелы" и БД большая, думаю около 1500-2000 записей, так что вариант с двумя запросами мне не подходит...

не подходит как раз вариант с твоим _одним_ запросом :)
сделай как говорит Ромик.
AnToXa - born programmer

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Выбрать 1 случайную запись.
« Ответ #24 : 04 Сентября 2002, 14:20:44 »
ГЫ:
сам сейчас столкнулся с такой проблемой
select .... order by rand() limit 5 по базе в 5 мегов(25000 записей) тупит ужасно
я сделал вот так:

$num
=mt_rand(1mysql_result(mysql_query("SELECT count(*) FROM table"), 0))-5;
$result=mysql_query("select id from table limit $num,5");
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Выбрать 1 случайную запись.
« Ответ #25 : 04 Сентября 2002, 16:03:43 »
Цитировать
$num=mt_rand(1, mysql_result(mysql_query("SELECT count(*) FROM table"), 0))-5;
$result=mysql_query("select id from table limit $num,5");

Глюк!!!!
Так надо:
$num=mt_rand(1, mysql_result(mysql_query("SELECT count(*) FROM table"), 0)-5);
$result=mysql_query("select id from table limit $num,5");
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

 

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