有好几次,我用随机选择行作为:
$get_question = $user_home->runQuery('SELECT * FROM questions WHERE Level = :Level ORDER BY RAND()');
一位Maven告诉我,
rand()是杀死mysql服务器的秘方!!
所以,在这个答案的帮助下,我试着:
$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)
但是,有时它只显示:
()
为什么会这样?我犯了什么错误?
2条答案
按热度按时间wnavrhmk1#
如果你有不到一百万排,
ORDER BY RAND() LIMIT nn
不是“杀手”。如果您仍然认为它是一个杀手,那么有多种方法可以在不进行全表扫描的情况下获取一些随机行:http://mysql.rjweb.org/doc.php/random (他们超出了戈多的建议。)
68bkxrlz2#
我想首先你应该知道
max
以及min
您table的id:然后从php生成随机id:
然后使用以下命令运行查询
$randomId
:更新:
首先获取整行数:
将其提取到php变量中,生成0到行号之间的行号:
然后像这样运行查询: