带有PHP的随机MySQL行-低系统资源

带有PHP的随机MySQL行-低系统资源,php,mysql,random,int,row,Php,Mysql,Random,Int,Row,我希望在不占用系统太多时间或资源的情况下,从MySQL获得一个随机行。我不在乎给出的代码是基于PHP还是基于MySQL的,但是请注意我的表中有“空白”。 我的表列是 “id”(主键,自动递增),varchar,int,int 我希望它尽可能随机您可以使用: SELECT id FROM table ORDER BY RAND() limit 1 您可以使用: SELECT id FROM table ORDER BY RAND() limit 1 好的解决方案有问题。好的解决方案有问题。我将

我希望在不占用系统太多时间或资源的情况下,从MySQL获得一个随机行。我不在乎给出的代码是基于PHP还是基于MySQL的,但是请注意我的表中有“空白”。

我的表列是 “id”(主键,自动递增),varchar,int,int

我希望它尽可能随机

您可以使用:

SELECT id FROM table ORDER BY RAND() limit 1
您可以使用:

SELECT id FROM table ORDER BY RAND() limit 1

好的解决方案有问题。

好的解决方案有问题。

我将通过两个查询和三个步骤来完成

  • 使用您的_表中的
    SELECT COUNT(*)查找表中的行数
  • 使用PHP查找0和行数之间的随机数
  • 使用
    SELECT*从您的_表LIMIT 200,1
    中获取所需的实际数据,其中200是您在步骤2中计算的随机数

  • 我将通过两个查询和三个步骤来完成

  • 使用您的_表中的
    SELECT COUNT(*)查找表中的行数
  • 使用PHP查找0和行数之间的随机数
  • 使用
    SELECT*从您的_表LIMIT 200,1
    中获取所需的实际数据,其中200是您在步骤2中计算的随机数


  • 对于这个问题,SO中已经有多个答案。做一个搜索。你关心概率分布吗?重复:另外:你能给出一个有差距的数据例子吗?这个问题的答案已经有很多了。做一个搜索。你关心概率分布吗?重复:另外:你能给出一个有间隙的数据示例吗?不,谢谢,这个表的行太多了,不能有效。它怎么能不贪婪呢?如果我们试图从具有间隙的表中获得一行,则得到一个随机记录和B的唯一方法确保我们返回一个有效的记录是穷尽的——即考虑表中所有主键的集合,并随机选择一个。使用概率方法,不能保证返回有效记录。但是,如果这不是一个问题(如果您不要求总是要回一个有效记录),那么mwalling有下面的解决方案。除了“随机”数非常接近表的大小,并且两个查询之间的行被删除,导致偏移量超过表的大小之外,你怎么可能得不到一个有效的记录呢?不,谢谢,这个表有太多的行,所以不能有效。它怎么可能不贪婪呢?如果我们试图从具有间隙的表中获得一行,则得到一个随机记录和B的唯一方法确保我们返回一个有效的记录是穷尽的——即考虑表中所有主键的集合,并随机选择一个。使用概率方法,不能保证返回有效记录。但是,如果这不是一个问题(如果您不要求总是要回一个有效记录),那么mwalling有下面的解决方案。除了“随机”数非常接近表的大小,并且两个查询之间的行被删除,导致偏移量超过表的大小之外,如何才能不获取有效记录?不要忽略我的表中的间隙:PDon不要忽略我的表中的间隙:py您可以在存储过程中完成所有这些,节省一次获取计数和返回的行程。如果数据库位于另一台主机上,您还可以减轻Web服务器的负载,从而使它可以用于它的用途……真的。我不经常使用存储过程,所以我不考虑在有用的地方使用它们:)您可以在存储过程中完成所有这些,省去了获取计数和返回的过程。如果数据库位于另一台主机上,您还可以减轻Web服务器的负载,从而使它可以用于它的用途……真的。我不经常使用存储过程,所以我不考虑在有用的地方使用它们:)