MySQL在一个查询中选择一个唯一行的随机行

时间:2013-07-14 03:14:54

标签: php mysql sql

是否可以从表中选择x个随机行,其中一个行必须是一个查询中的特殊行(因此具有特殊字段值)?

基本上我想要创建的是一个猜测游戏,你有x个问题,有x个可能的(复选框可选)答案!

这是我当前选择答案的方式......使用2个查询

$answers = 4; // This is the max amount of answers

//仅用于测试,可手动设置question_id

$query = "SELECT * FROM `answers` WHERE `question_id` = 0 AND `correct` != 1 ORDER BY RAND() LIMIT " . ($answers - 1) . "";
$query = "SELECT * FROM `answers` WHERE `question_id` = 0 AND `correct` = 1 LIMIT 1";

“question_id”告诉我们正在讨论哪个问题,“正确”只是告诉该字段是否正确答案

那么可以在一个查询中从表中选择x个随机行,其中一行必须是“正确的”吗?

2 个答案:

答案 0 :(得分:1)

可以使用 UNION

$answers = 4;

$query = "SELECT * FROM `answers` WHERE `question_id` = 0 AND `correct` != 1 ORDER BY RAND() LIMIT " . ($answers - 1) . "";

$query .= " UNION ";

$query .= "SELECT * FROM `answers` WHERE `question_id` = 0 AND `correct` = 1 LIMIT 1";

只需一个查询,您就可以获得所需的结果

http://dev.mysql.com/doc/refman/5.0/en/union.html

答案 1 :(得分:0)

$query = "SELECT * FROM answers WHERE ... whatever ... AND `question_id` IN (5, 9, 12, 16, 2)

因此,您首先找到行数,然后将正确答案的ID放入WHERE IN语句中。因为你知道你想要的那个,你可以用表中的随机ID包围它,然后以随机方式渲染它们。