Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何编写随机选择问题的SQL查询_Mysql_Sql - Fatal编程技术网

Mysql 如何编写随机选择问题的SQL查询

Mysql 如何编写随机选择问题的SQL查询,mysql,sql,Mysql,Sql,我有以下查询,从数据库中随机选择一个问题进行问答游戏 SELECT * FROM questionsbank WHERE QuestionID <> 1 ORDER BY RAND() LIMIT 1 但是,当用户正确回答问题时,我必须随机选择与刚才选择的问题不同的另一个问题,并继续。在sql中如何实现这一点?我的想法是声明一个变量并推送已回答的问题ID,然后使用NOT IN语句,但我不知道如何实现它。我猜在某个时刻,您必须将用户答案保存在db上 因此,如果您有表格:

我有以下查询,从数据库中随机选择一个问题进行问答游戏

SELECT 
*
FROM
    questionsbank
WHERE QuestionID <> 1
ORDER BY RAND() 
LIMIT 1

但是,当用户正确回答问题时,我必须随机选择与刚才选择的问题不同的另一个问题,并继续。在sql中如何实现这一点?我的想法是声明一个变量并推送已回答的问题ID,然后使用NOT IN语句,但我不知道如何实现它。

我猜在某个时刻,您必须将用户答案保存在db上

因此,如果您有表格:

Answers (answer_id (pk), user_id (fk), question_id  (fk), answer ...);
您可以按如下方式筛选已回答的问题:

 SELECT Q.*
 FROM QuestionsBank Q
 LEFT JOIN Answers A
   ON Q.question_id = A.question_id
  AND A.user_id = @yourUser
WHERE A.question_id is NULL
ORDER BY RAND()
LIMIT 1

其中问题ID不在1,2,4,10[,…]。。。你的代码是正确的,按随机数排序,只选一个。若要排除已选择的问题,您的建议也是正确的,请在后续查询中排除带有not in或类似名称的ID。我将从一个表开始,该表中用户正确回答的每个问题都有一行。