0

我有一个 SELECT 查询,我期望从中获得数百万个结果。我需要在 MySQL 中随机化这些结果。查询后在我的脚本中执行此操作显然会使用太多 RAM。有人可以重做这个查询,以便结果都是随机的,而不使用 rand() 的顺序吗?我看过一些示例并尝试使用它们,但它们对我不起作用,因为它们似乎都依赖于返回整个表而不是使用 WHERE 子句。这是我的查询:

SELECT * FROM pool
WHERE gender = 'f'
AND (`location` = 'united states' OR `location` = 'us' OR `location` = 'usa');
4

2 回答 2

0

如果您可以使用其他语言,例如 php,您可以使用它的rand()函数来生成 id 并将其添加到查询中,例如

$ids = range($mini, $maxid);
shuffle($ids);
array_slice($ids, 0, $quantity);

或您使用的任何语言中的类似内容。

如果您需要在纯 mysql 查询中执行此操作,那么这里有一些替代方法:http ://www.electrictoolbox.com/msyql-alternative-order-by-rand/

于 2012-06-13T22:11:02.747 回答
0

如果您有 1000 万行带有 id 的行,它们是否在连续范围内?

  1. 通过快速选择从您想要的范围中获取最低的 id。
  2. 获取最大的 id 为好。
  3. 使用php生成此范围内的随机数
  4. 一旦你有你的号码“SELECT * FROM table1 WHERE id IN(你生成的号码)”或类似的东西
于 2012-06-13T22:23:21.503 回答