如何获得mysql随机整数范围?
Posted
技术标签:
【中文标题】如何获得mysql随机整数范围?【英文标题】:How to get mysql random integer range? 【发布时间】:2010-11-02 08:00:27 【问题描述】:我正在尝试为我在 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
【问题讨论】:
【参考方案1】:我正在运行您的查询,它确实为我提供了每一行的随机数.... 可能与随机数(计时器)的名称有关?
【讨论】:
【参考方案2】:这对我有用。你的mysql版本可能吗?
SELECT id, (FLOOR( 1 + RAND( ) *60 )) AS timer
FROM users
LIMIT 0 , 30
【讨论】:
但是这个查询重复值【参考方案3】:RAND
函数的输出始终是介于 0 和 1 之间的值。
试试这个:
SELECT downloads.date, products.*, (CAST(RAND() * 60 AS UNSIGNED) + 1) AS timer
【讨论】:
你可以使用 floor 而不是强制转换为 int,强制转换使用 round。【参考方案4】:您可以将数字乘以表中的记录数。
SELECT id,
(FLOOR( (SELECT MIN(id) FROM your_table ) + RAND( ) * 1000000 ) ) AS timer
FROM your_table
LIMIT 0 , 30
【讨论】:
【参考方案5】:老问题,但始终是实际问题。
这里有一种创建MySQL函数的方法random_integer()
based on manual:
CREATE FUNCTION random_integer(value_minimum INT, value_maximum INT)
RETURNS INT
COMMENT 'Gets a random integer between value_minimum and value_maximum, bounds included'
RETURN FLOOR(value_minimum + RAND() * (value_maximum - value_minimum + 1));
SELECT ALL random_integer(1, 60) AS timer;
【讨论】:
以上是关于如何获得mysql随机整数范围?的主要内容,如果未能解决你的问题,请参考以下文章