选择条件适用的随机行

时间:2015-08-11 03:37:00

标签: php mysql

我有一个结构名称表,如下所示:

id int(11) -Auto Increment PK
name varchar(20)
gender varchar(10)
taken tinyint - bool value

我希望得到一个单行的随机名称,其中性别是男性而且被视为假。如何在不减速的情况下做到这一点?

我想到的是SELECT gender = maletaken = false所有行。然后使用php的rand(1, total_rows)并使用随机生成的记录编号中的名称作为结果数组。

或者我可以使用,但RAND()会减慢进程(取自stackoverflow上的其他问题)

SELECT * FROM xyz WHERE (`long`='0' AND lat='0') ORDER BY RAND() LIMIT 1

1 个答案:

答案 0 :(得分:1)

您可以采取以下方法:

  1. 选择符合条件的ID列表,例如SELECT id FROM table WHERE name=...
  2. 随机选择一个id
  3. 使用该ID获取整个数据,例如SELECT * FROM table WHERE id=<id>
  4. 这种方法可以最大化MySQL中的查询缓存。步骤3中的查询很有可能达到相同的id,在这种情况下,查询缓存可以加速数据库访问。此外,如果将来使用像memcached或redis这样的缓存,那么步骤3也可以由他们来处理,甚至不用去db。