select在mysql中的随机查询

9ceoxa92  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(304)

有好几次,我用随机选择行作为:

$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)

但是,有时它只显示:

()

为什么会这样?我犯了什么错误?

wnavrhmk

wnavrhmk1#

如果你有不到一百万排, ORDER BY RAND() LIMIT nn 不是“杀手”。
如果您仍然认为它是一个杀手,那么有多种方法可以在不进行全表扫描的情况下获取一些随机行:http://mysql.rjweb.org/doc.php/random (他们超出了戈多的建议。)

68bkxrlz

68bkxrlz2#

我想首先你应该知道 max 以及 min 您table的id:

select max(id) as mx , min(id) as mn  from questions

然后从php生成随机id:

$randomId = rand($min, $max);

然后使用以下命令运行查询 $randomId :

SELECT * FROM questions WHERE id = $randomId

更新:
首先获取整行数:

SELECT COUNT(*) FROM questions

将其提取到php变量中,生成0到行号之间的行号:

$randNum = rand(0, $rowCount);

然后像这样运行查询:

SELECT * FROM questions LIMIT $rowNumber, 1

相关问题