在MySQL中选择随机查询

时间:2018-04-24 14:19:41

标签: php mysql mysqli pdo

有几次我用来选择随机行:

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

但是,有时只会显示:

()

为什么这样?我做错了什么?

Here is the Snapshot of my database having question!!

2 个答案:

答案 0 :(得分:0)

我认为首先你应该知道你的maxmin个人的身份:

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变量,生成零和行号之间的行号:

$randNum = rand(0, $rowCount);

然后像这样运行查询:

SELECT * FROM questions LIMIT $rowNumber, 1

答案 1 :(得分:0)

如果您的行数不到一百万,ORDER BY RAND() LIMIT nn就不是&#34;杀手&#34;。

如果您仍然认为它是一个杀手,这有多种方法可以获得一些随机行而无需进行全表扫描http://mysql.rjweb.org/doc.php/random (他们超越了戈多的建议。)