Как получить случайный целочисленный диапазон MySQL? - PullRequest
48 голосов
/ 12 июня 2009

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

SELECT downloads.date, products.*, (FLOOR(1 + RAND() * 60)) AS timer

Я искал и продолжаю подходить к этой функции FLOOR, как выбрать случайное целое число в диапазоне. Это дает мне 1 для каждого ряда. Чего мне не хватает?

Я нахожусь на mysql 5.0.75

Вот и остальная часть запроса, я верю, что это может быть проблема с вложением

SELECT *
FROM (
 SELECT downloads.date, products.*, FLOOR(1 + (RAND() * 60)) AS randomtimer, 
 (
 SELECT COUNT( * )
 FROM distros
 WHERE distros.product_id = products.product_id
 ) AS distro_count,

 (SELECT COUNT(*) FROM downloads WHERE downloads.product_id = products.product_id) AS true_downloads

 FROM downloads
 INNER JOIN products ON downloads.product_id = downloads.product_id
) AS count_table
WHERE count_table.distro_count > 0
AND count_table.active = 1
ORDER BY count_table.randomtimer , count_table.date DESC LIMIT 10

Ответы [ 4 ]

90 голосов
/ 12 июня 2009

Это работает для меня. Ваша версия MySQL может быть?

SELECT id, (FLOOR( 1 + RAND( ) *60 )) AS timer
FROM users
LIMIT 0 , 30
2 голосов
/ 12 июня 2009

Я выполняю ваш запрос, и он дает мне случайное число для каждой строки .... может быть, как-то связано с именем случайного (таймер)?

1 голос
/ 12 июня 2009

Выход функции RAND всегда будет иметь значение между 0 и 1 .

Попробуйте это:

SELECT downloads.date, products.*, (CAST(RAND() * 60 AS UNSIGNED) + 1) AS timer
0 голосов
/ 04 февраля 2015

Вы можете увеличить число, умноженное на количество записей в таблице.

SELECT id,

(FLOOR( (SELECT MIN(id)                        FROM  your_table ) + RAND( ) * 1000000 ) ) AS timer
FROM your_table
LIMIT 0 , 30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...