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

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

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Выбрать 1 случайную запись.
« : 20 Августа 2002, 08:37:37 »
Необходимо сделать сабж. Сделал так:
SELECT anek FROM anek WHERE id=(1+FLOOR(MAX(id)*RAND()))
а он мне
1111 - Invalid use of group function - -1 rows affected

так
SELECT * FROM anek HAVING id=(1+FLOOR(MAX(id)*RAND()))
не робит правильно.
Мож кто подскажет оптимальный вариант, а я сделал так
SELECT anek FROM anek ORDER BY RAND() LIMIT 1
Но мне кажется это коряво.:insane:
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Tronyx

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

А вроде не очень и коряво. Можно id самому генерировать (в скрипте), но это хуже...
С уважением, Владимир Гончаренко - COPI# 93
Ролевая онлайн игра

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Выбрать 1 случайную запись.
« Ответ #2 : 20 Августа 2002, 09:37:36 »
Цитировать
Можно id самому генерировать (в скрипте)

Нельзя. Т.к. придётся 2 запроса делать:
1 - Узнаём мах id (или весь массив id)
2 - Выбираем строку по случайному id.
Цитировать
А вроде не очень и коряво.

Да нет коряво. Т.к. используется ORDER и следовательно приходится выбирать сначала все записи, а далее их сортировать в случ. порядке и всё это ради одной записи.
Совсем др. дело первый запрос (если бы он работал), выбираем всего 1 запись и + используем примари кей.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Выбрать 1 случайную запись.
« Ответ #3 : 20 Августа 2002, 09:50:50 »
Цитировать
Узнаём мах id

Надо дергать весь массив. У тебя не обязательно id упорядоченно идет.
AS IS...

Оффлайн Alexandr

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

Именно в моем скрипте/случае достаточно узнать мах.
[OFF]Я же упомянул это в скобках в пред. посте[/OFF]
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Maniac

  • Ума нет - считай коллега
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 844
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Выбрать 1 случайную запись.
« Ответ #5 : 20 Августа 2002, 11:51:36 »
А чем тебя два запроса не устраивают? IMHO тормозить сервер только из-за того, что хочется сделать красивее не шибко правильно
TANSTAAFL

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Выбрать 1 случайную запись.
« Ответ #6 : 20 Августа 2002, 12:04:50 »
Цитировать
А чем тебя два запроса не устраивают?

В принципе согласен.
2 запроса:
$num=mt_rand(1, mysql_result(mysql_query("SELECT MAX(id) FROM anek"), 0));
$text_anek=mysql_result(mysql_query("SELECT anek FROM anek WHERE id=".$num), 0);
Будут работать быстрее, чем
$text_anek=mysql_result(mysql_query("SELECT anek FROM anek ORDER BY RAND() LIMIT 1"), 0);

Просто хотелось что-нть...... если кто-то знает.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

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

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Выбрать 1 случайную запись.
« Ответ #7 : 20 Августа 2002, 15:12:11 »
Коряво???
А ты можешь привести хоть один аргумент этой корявости?
Кажется - это в церкви говорят. А здесь прфорум по программированию.

Вот с двумя запросами - это действительно коряво. Если анекдоты будут удаляться.

Оффлайн Maniac

  • Ума нет - считай коллега
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 844
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Выбрать 1 случайную запись.
« Ответ #8 : 20 Августа 2002, 15:29:11 »
Цитировать
Вот с двумя запросами - это действительно коряво. Если анекдоты будут удаляться.


Это не коряво - это правильно и быстро.
А если анекдоты будут удаляться - надо читать внимательно постинги автора:
Цитировать
Именно в моем скрипте/случае достаточно узнать мах.
TANSTAAFL

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

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Выбрать 1 случайную запись.
« Ответ #9 : 20 Августа 2002, 16:36:45 »
Мда, не увидел.
просто уж больно редкий случай, когда id по порядку.
И как можно называть кривой конструкцию, которая была специально именно для таких случаев, введена в язык?

Оффлайн Alexandr

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

Основное что будет делаться - это извлечение из БД, следовательно мона пожертвовать скоростью добавления:
ALTER TABLE DROP id
...
INSERT .....
ALTER TABLE ADD id mediumint NOT NULL auto_increment UNSIGNED
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Выбрать 1 случайную запись.
« Ответ #11 : 20 Августа 2002, 16:58:40 »
Цитировать
И как можно называть кривой конструкцию, которая была специально именно для таких случаев, введена в язык?

А эт ты о чём?
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Maniac

  • Ума нет - считай коллега
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 844
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Выбрать 1 случайную запись.
« Ответ #12 : 20 Августа 2002, 17:44:53 »
Цитировать
А эт ты о чём?

Это он про Limit
TANSTAAFL

Оффлайн tserbis

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 496
  • +0/-0
  • 0
    • Просмотр профиля
Выбрать 1 случайную запись.
« Ответ #13 : 20 Августа 2002, 17:54:36 »
:-) это он про order by rand()

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Выбрать 1 случайную запись.
« Ответ #14 : 20 Августа 2002, 18:02:23 »
Maniac
Цитировать
Это он про Limit

tserbis
Цитировать
это он про order by rand()

И что?
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