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

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

Оффлайн Antosha

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
    • http://antosha.com.ru
случайная выборка из mysql
« : 04 Ноября 2004, 15:38:49 »
Люди, кто знает, как лучше на PHP реализовать выборку случайной строки из таблицы mysql, не зависимо от структуры таблицы.
« Последнее редактирование: 04 Ноября 2004, 16:47:45 от Antosha »

Оффлайн Daiz13

  • наблюдатель
  • Постоялец
  • ***
  • Сообщений: 150
  • +0/-0
  • 2
    • Просмотр профиля
    • http://rg.com.ua/
случайная выборка из mysql
« Ответ #1 : 04 Ноября 2004, 16:00:42 »
для начала можно ORDER BY RAND(), хотя работает довольно странно

и пхп тут абсолютно ни при чем

Оффлайн Antosha

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
    • http://antosha.com.ru
случайная выборка из mysql
« Ответ #2 : 04 Ноября 2004, 16:22:09 »
сделал запрос SELECT * FROM blabla ORDER BY RAND(); и как результат он мне вывел все содержимое таблицы(или почти все, таблица очень большая)

Оффлайн RomikChef

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
случайная выборка из mysql
« Ответ #3 : 04 Ноября 2004, 16:36:09 »
Antosha
ты именно этого и хотел.
теперь можешь радоваться.

Оффлайн Antosha

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
    • http://antosha.com.ru
случайная выборка из mysql
« Ответ #4 : 04 Ноября 2004, 16:48:27 »
Блин, извините, ступил... Мне надо выбрать одну строку.

Оффлайн RomikChef

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
случайная выборка из mysql
« Ответ #5 : 04 Ноября 2004, 16:55:22 »
за количество строк отвечает оператор LIMIT

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
случайная выборка из mysql
« Ответ #6 : 04 Ноября 2004, 16:57:06 »
SELECT * FROM blabla ORDER BY RAND() LIMIT 1;

Оффлайн Antosha

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
    • http://antosha.com.ru
случайная выборка из mysql
« Ответ #7 : 04 Ноября 2004, 17:03:20 »
бАльшое спасибА!!!

Оффлайн mymind

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.forum.angarsk.info
случайная выборка из mysql
« Ответ #8 : 05 Ноября 2004, 11:54:07 »
А когда присутсвует в запросе WHERE странно работает, постоянно одно и тоже значение ... вот такой запрос

SELECT  *
FROM  `table`
WHERE col >0 AND
TYPE =1 AND
idsquare!=2
ORDER  BY RAND()
LIMIT 1

Всегда дает один и тот же результат.

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
случайная выборка из mysql
« Ответ #9 : 05 Ноября 2004, 13:23:03 »
А то же самое без LIMIT 1 сколько строк даст?

Оффлайн mymind

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.forum.angarsk.info
случайная выборка из mysql
« Ответ #10 : 05 Ноября 2004, 13:49:22 »
Выбирает строки по условию но порядок строк всегда один и тот же .. В этом вся загвозка, когда делаешь просто SELECT * FROM table ORDER BY RAND() LIMIT 1 - то, да. Выборка случайно идет. Но когда вклиниваешь условия, то результат постоянный. Пока не знаю в чем причина.

Оффлайн Daiz13

  • наблюдатель
  • Постоялец
  • ***
  • Сообщений: 150
  • +0/-0
  • 2
    • Просмотр профиля
    • http://rg.com.ua/
случайная выборка из mysql
« Ответ #11 : 05 Ноября 2004, 17:55:17 »
чем полдня ждать ответа, поискал бы в Гугле, там достаточно примеров кто и как это решал

Оффлайн mymind

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.forum.angarsk.info
случайная выборка из mysql
« Ответ #12 : 06 Ноября 2004, 04:47:53 »
Интересно вот что ... когда использовал вот такую конструкцию, то процес, как говориться, пошел ...
SELECT *,(RAND()*100) AS rnd
FROM `table`
WHERE col >0 AND
TYPE =1 AND
idsquare!=2
ORDER BY rnd
LIMIT 1

В итоге выборка пошла случайно. Если убрать из SELECT где мы выбираем (RAND()*100) AS rnd то снова получаем один и тот же порядок, точнее запись будет выпадать одна и та же ...
Хотя заметил, что псевдослучайность тут тоже не ахти какая. Очень часто выпадает первая запись, даже чаще чем другие.

Так что вопрос о выборке из базы случайно остается открытым.

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
случайная выборка из mysql
« Ответ #13 : 06 Ноября 2004, 12:00:16 »
Сам Man MySQL не рекомендует использовать RAND() таким образом: Оператор RAND() не следует воспринимать как полноценный генератор случайных чисел: это просто быстрый способ динамической генерации случайных чисел, переносимых между платформами для одной и той же версии MySQL.
В качестве альтернативы можно, если заранее знаешь кол-во строк в таблице, генерировать случайное число в скрипте, а потом подставлять его в LIMIT N, 1

Оффлайн RomikChef

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
случайная выборка из mysql
« Ответ #14 : 06 Ноября 2004, 12:02:33 »
select count(*) from table
$rnd=rand(0,$total);
select * from table limit $rnd,1

 

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