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!没错!非常感谢你,几个星期来我一直在为这件事头疼!