选择条件有效的随机行


Select random row where condition apply effectvely

我有一个名字表,结构如下:

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. 选择符合您标准的id列表,如SELECT id FROM table WHERE name=...
  2. 使用php
  3. 随机选择id
  4. 获取该id的全部数据,如SELECT * FROM table WHERE id=<id>

这种方法将最大化MySQL中的查询缓存。第3步中的查询很有可能碰到相同的id,在这种情况下,查询缓存可以加速数据库访问。此外,如果将来使用memcached或redis这样的缓存,步骤3也可以由它们来处理,甚至不需要去db.