2009-11-10 68 views
0

我正在寻找从MySQL获取一个随机行,而无需在系统上使用太多的时间或资源。我不在乎天气代码给出的是PHP或MySQL的基础,但是请注意我的表中存在'空白'。带有PHP的随机MySQL行 - 低系统资源

我的表列 'ID'(主键,自动递增),VARCHAR,INT,INT

我希望它尽可能随机

+2

对此问题已有多个答案。做一个搜索。 – dnagirl 2009-11-10 19:56:18

+0

你关心概率分布吗? – 2009-11-10 19:56:38

+1

Duplicate:http://stackoverflow.com/questions/142242/what-is-the-best-way-to-pick-a-random-row-from-a-table-in-mysql – 2009-11-10 20:01:56

回答

1

我会做两个查询,总共三个步骤。

  1. 查找使用SELECT COUNT(*) FROM your_table
  2. 使用PHP的math functions找到介于0和行数的随机数表中的行数
  3. 得到你想要使用SELECT * FROM your_table LIMIT 200, 1的实际数据,其中200是你在步骤2中计算出的随机数。
+1

您可以在存储过程中执行所有操作,从而节省访问次数并返回。如果数据库位于不同的主机上,则可以额外减轻网络服务器的负载,因此它可用于其目的... – 2009-11-10 20:18:11

+0

正确。我没有定期使用存储过程,所以我不考虑在他们会用的地方使用它们:) – mwalling 2009-11-10 20:33:54

0

您可以使用:

SELECT id FROM table ORDER BY RAND() limit 1 
+2

不用了,这个表格有太多的行数,为了有效 – RSully 2009-11-10 19:59:34

+2

是真的。但资源贪婪。 – dnagirl 2009-11-10 19:59:57

+0

它怎么会不贪心?如果我们试图从一个有缺口的表中得到单行,唯一的方法是A)得到一个随机记录,B)确保我们返回的有效记录是详尽的 - 即考虑所有主键的集合在桌子上,随机挑一个。使用概率方法,您不能保证返回有效的记录。但是,如果这不是问题(如果你不需要你总是得到有效的记录),那么mwalling就有下面的解决方案。 – 2009-11-10 20:10:20