2013-07-14 121 views
0

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

基本上我正在创建的是一个猜测游戏,其中有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个随机行,其中一行有在一个查询中是“正确的”?

+0

你尝试使用UNION子句? – Sparky

回答

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

+0

该死的,这给了我这个错误...不正确的使用UNION和ORDER BY – Vallentin

+1

哦,它需要围绕每个“查询” – Vallentin

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

所以,你先找到的行数,然后把正确答案的ID到WHERE IN声明。因为你知道你想要的那个,所以你可以用表中的随机ID包围它,然后以随机的方式渲染它们。

+0

不,我不知道答案的ID,我唯一知道的是question_id和行数(回答)我想要的回报 – Vallentin

+0

然后在存在的行数里面生成随机数 – David

+0

所以你要我做另一个查询,检查有多少行存在,然后......那么这不会使它成为只有一个查询? – Vallentin

相关问题