Php 没有';不要重复用户正确回答的问题
我有一个问题表,如下所示:Php 没有';不要重复用户正确回答的问题,php,mysql,Php,Mysql,我有一个问题表,如下所示: ID | question | a | b | c | d | e | correct_item 1 | What's my name? | joao | pedro | jose | mateus | lucas | b 2 | How old am I? | 15 | 18 | 20 | 22 | 25 | d 3 |
ID | question | a | b | c | d | e | correct_item
1 | What's my name? | joao | pedro | jose | mateus | lucas | b
2 | How old am I? | 15 | 18 | 20 | 22 | 25 | d
3 | Where are you from? | Paris| Berlin| Tokyo| Nairobi| Rio | d
当用户访问他的个人资料页面时,会有一个模式
按钮,从数据库中选择一个随机问题
$busca_questoes = "SELECT * FROM questoes ORDER BY rand() LIMIT 1";
$result_questoes = mysqli_query($conexao, $busca_questoes);
$questoes = mysqli_fetch_array($result_questoes);
我想知道的是:
id_table | id_question | id_user | correct
1 | 1 | 2 | yes
2 | 2 | 2 | no
3 | 1 | 1 | yes
但我发现这个策略的问题是,几乎需要手动将每个问题与用户关联起来。当用户注册到网站时,我可以这样做,但是当添加新问题时,我应该怎么做
现在我不知道该怎么解决这个问题。如果需要更多信息,请告诉我。正如Shadow评论的那样,您希望存储已向每个用户提出的问题,而不管他们是否给出了正确答案。您不需要存储他们尚未回答的问题 然后,您可以使用以下查询提取尚未向给定用户询问的随机问题:
SELECT *
FROM questions q
WHERE NOT EXISTS (
SELECT 1
FROM user_questions uq
WHERE uq.id_user = :id_user AND uq.id_question = q.id_question
)
ORDER BY rand() LIMIT 1
其中参数:id\u user
是当前用户的id
要使其工作,您需要大量的问题,因为一旦用户看到所有可能的问题,上述查询将返回一个空的结果集。或者,您可以在user\u questions
表中存储询问每个问题的日期,并在子查询中添加一个过滤器,以仅排除最近看到的问题
SELECT *
FROM questions q
WHERE NOT EXISTS (
SELECT 1
FROM user_questions uq
WHERE
uq.id_user = :id_user
AND uq.id_question = q.id_question
AND uq.date_asked > NOW() - INTERVAL 30 DAY
)
ORDER BY rand() LIMIT 1
您只需要记录用户是否正确回答了问题,无需记录否。好的,但我看不出这将如何帮助我对未正确回答或根本未回答的问题进行排序。谢谢你的评论!谢谢你的回答!然而,这不是我打算做的。我希望实现的是:如果答案正确,用户将不会再看到它,但如果答案不正确或只是一个新问题,用户将一遍又一遍地看到它,直到它正确回答为止。@PedroSchimmelpfeng:好的,这基本上不会改变我的答案。总的逻辑是一样的,你只需要替换它:你想存储已经向每个用户提出的问题,不管他们是否给出了正确的答案。你想存储已经向每个用户提出并且他们正确回答的问题。你是对的,@GMB!没错!非常感谢你,几个星期来我一直在为这件事头疼!