【发布时间】:2018-10-04 20:30:07
【问题描述】:
有几次我用来选择随机行:
$get_question = $user_home->runQuery('SELECT * FROM questions WHERE Level = :Level ORDER BY RAND()');
一位专家告诉我,
RAND() 是杀死 MySQL 服务器的秘诀!
所以,在this answer 的帮助下,我尝试了:
$get_question = $user_home->runQuery('SELECT * FROM questions AS r1 JOIN (SELECT CEIL(RAND() * (SELECT MAX(Sr) FROM questions)) AS Sr) AS r2 WHERE r1.Sr >= r2.Sr AND Level = :Level ORDER BY r1.Sr ASC LIMIT 1');
这就是我显示结果的方式:
echo $fetch_question['Question'] . "(" . $fetch_question['Id'] . ")";
然后显示是:
question(id)
但是,有时它只显示:
()
为什么会这样?我做错了什么?
【问题讨论】:
-
为什么不直接获取所有行,然后为每个 PHP 选择一个随机行?
-
@wayneOS 每个查询我只需要一行,这里的数据库只有 15 个(每个
Level5 个)用于理解,实际上有 10K+ 问题... -
如果使用 RAND() 没有给您带来任何问题,为什么要更改?
-
OP 提到了
RAND() is a recipe for killing MySQL server !! -
然而...如果
Rand()工作正常,为什么不使用它呢? “专家”的建议听起来很可疑(但我不是专家,只是有人会使用 Rand() 如果它对我有用。