【问题标题】:select 1 random number from mysql database using asp.net c#使用asp.net c#从mysql数据库中选择1个随机数
【发布时间】:2015-06-20 06:37:16
【问题描述】:

如何从 ID 为自动增量字段的数据库中选择 1 个随机数。我在数据库中有 25,000 [ID] 条记录。每次选择一个新的随机 ID。 怎么弄啊。

【问题讨论】:

  • 请详细说明您的问题。
  • 在我的数据库表ID[自动增量]中,产品名称两个字段然后总产品提取30,000条记录。现在有30,000个成员,现在每个成员通过ID随机显示一个产品,没有重复ID。就是这样。这些信息对你来说已经足够了。

标签: mysql random


【解决方案1】:

您可以使用以下query 生成表行的 0 到 COUNT-1 之间的随机数:

SELECT ROUND((RAND() * (SELECT COUNT(*) FROM mytable)-1)) 

然后在查询的LIMIT 子句中将此数字用作偏移量,以从表中获取随机行。

使用准备好的语句,您可以:

SET @offset = (SELECT ROUND((RAND() * (SELECT COUNT(*) FROM mytable)-1)));

PREPARE STMT FROM 'SELECT * FROM mytable LIMIT ?, 1';
EXECUTE STMT USING @offset;

请注意,使用准备好的语句是强制性的,因为如 manual 中所述:

LIMIT 接受一个或两个数字参数,它们都必须是 非负整数常量使用prepared时除外 声明)。

Demo here

【讨论】:

  • 我试过查询执行已经生成的值会显示。如何克服重复值
【解决方案2】:

使用下面的sql(慢)

'SELECT * FROM tablename ORDER BY RAND() LIMIT 1'

或者你可以使用(快速)

SELECT * FROM myTable, (SELECT FLOOR(MAX(myTable.id) * RAND()) AS randId FROM myTable) AS someRandId WHERE myTable.id = someRandId.randId 

内部 SELECT 为您提供正确范围内的随机 id。 外部 SELECT 在表中查找正确的行。

【讨论】:

  • 感谢您的快速回复@Ravi Kumar Mistry。我已经尝试过 ORDER BY RAND() 查询导致性能问题。任何其他方式..
  • 我没有在 sql 中运行查询,所以它可能是错误的,我在最后一个查询中尝试做的是获取 1 条记录并跳过记录的随机数(少于总记录)跨度>
  • 代码工作正常。我尝试上传 10 个 id 之后 10 次执行查询显示结果 1,7,2,9,1,7,5,2,6,3。在结果 7 ,1,2 重复两次。我不想重复相同的数字
  • 这是随机的性质,没有人知道接下来会发生什么。为此,您需要明确处理它,因为在查询执行并返回数据后,它对先前的结果集一无所知。所以在您的代码中处理它。
  • 如果新记录 ID 与数组中的任何 id 匹配,则可以在代码中维护一个包含最后 100 个 id 的 int 数组,丢弃结果集并再次运行查询。[提示:保持数组较小更大的数组最有可能在数组中找到的记录]
猜你喜欢
  • 2018-01-12
  • 1970-01-01
  • 2017-03-05
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 2011-10-24
相关资源
最近更新 更多