如何获得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 函数的输出始终是介于 01 之间的值。

试试这个:

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随机整数范围?的主要内容,如果未能解决你的问题,请参考以下文章

如何随机获得3-23之间的整数(请用JS代码实现)

如何在 Java 中生成特定范围内的随机整数?

如何在 Java 中生成特定范围内的随机整数?

excel如何生成一定范围内不重复的随机整数?

MySQL取得某一范围随机数

如何在[0,5]范围内的fortran 90中生成整数随机数?