0
 SELECT name
  FROM random AS r1 JOIN
       (SELECT (RAND() *
                     (SELECT MAX(id)
                         FROM random)) AS id)
        AS r2
 WHERE r1.id >= r2.id
 ORDER BY r1.id ASC
 LIMIT 1;

在查找 MySQL 的优化时,我想出了这个查询。但是,它并不完全符合我的目的,因为我想从我的数据库中提取随机用户,但我也有一个活动字段。所以我想确保“active = 1”,但我不确定我会在哪里将它插入到这个查询中以使其工作。

4

2 回答 2

3

我认为应该这样做:

SELECT name
FROM random r1
JOIN (SELECT RAND()*MAX(id) randid
      FROM random
      WHERE active = 1) r2
WHERE r1.id >= r2.randid
AND r1.active = 1
ORDER BY r1.id
LIMIT 1

您需要active = 1在子查询和主查询中进行测试。

于 2013-07-30T03:18:43.097 回答
1
SELECT * FROM users WHERE active = 1 ORDER BY RAND() LIMIT 1;

虽然有更多优化的替代方法RAND(),但我鼓励您从上述内容开始简化查询,然后再进行优化。

于 2013-07-30T03:13:57.800 回答