【问题标题】:MS MySQL + get stats (as percentage) based of quiz answers vs correct answerMySQL +获取基于测验答案的统计数据(百分比)与正确答案
【发布时间】:2020-01-06 15:31:10
【问题描述】:

这个尝试有点超出我的 SQL/查询技能,所以我正在寻求关于如何完成它的建议。

总结:

有一个记录用户尝试回答一些测验问题的表格。

  • 当前问题
  • 提供答案
  • 正确答案

这是表格布局:

create table quiz_answers(
    id int,
    submit_date datetime,
    session_id varchar(255),
    quiz_name varchar(255),
    question_num varchar(255),
    answer varchar(255),
    correct_answer varchar(255),
    user_ip varchar(255)
);

insert into quiz_answers(id, submit_date, session_id, quiz_name, question_num, answer, correct_answer, user_ip) values
(1, '2019-09-03 11:39:07', 'xxxxx', 'q1_xxx_quiz', 'q1_question0', 'answer1', 'correct_answer', 'xx.xx.xx.xxxx'),
(2, '2019-09-03 11:39:07', 'xxxxx', 'q1_xxx_quiz', 'q1_question0', 'answer2', 'correct_answer', 'xx.xx.xx.xxxx'),
(3, '2019-09-03 11:39:07', 'xxxxx', 'q1_xxx_quiz', 'q1_question0', 'correct_answer', 'correct_answer', 'xx.xx.xx.xxxx'),
(4, '2019-09-03 11:39:07', 'xxxxx', 'q1_xxx_quiz', 'q1_question0', 'answer1', 'correct_answer', 'xx.xx.xx.xxxx'),
(5, '2019-09-03 11:39:07', 'xxxxx', 'q1_xxx_quiz', 'q1_question0', 'answer3', 'correct_answer', 'xx.xx.xx.xxxx'),
(6, '2019-09-03 11:39:07', 'xxxxx', 'q1_xxx_quiz', 'q1_question0', 'answer4', 'correct_answer', 'xx.xx.xx.xxxx'),
(7, '2019-09-03 11:39:07', 'xxxxx', 'q1_xxx_quiz', 'q1_question0', 'answer3', 'correct_answer', 'xx.xx.xx.xxxx'),
(8, '2019-09-03 11:39:07', 'xxxxx', 'q1_xxx_quiz', 'q1_question0', 'correct_answer', 'correct_answer', 'xx.xx.xx.xxxx'),
(9, '2019-09-03 11:39:07', 'xxxxx', 'q1_xxx_quiz', 'q1_question0', 'answer0', 'correct_answer', 'xx.xx.xx.xxxx'),
(10, '2019-09-03 11:39:07', 'xxxxx', 'q1_xxx_quiz', 'q1_question1', 'answer1', 'correct_answer', 'xx.xx.xx.xxxx'),
(11, '2019-09-03 11:39:07', 'xxxxx', 'q1_xxx_quiz', 'q1_question1', 'answer1', 'correct_answer', 'xx.xx.xx.xxxx'),
(12, '2019-09-03 11:39:07', 'xxxxx', 'q1_xxx_quiz', 'q1_question1', 'answer3', 'correct_answer', 'xx.xx.xx.xxxx'),
(13, '2019-09-03 11:39:07', 'xxxxx', 'q1_xxx_quiz', 'q1_question1', 'answer4', 'correct_answer', 'xx.xx.xx.xxxx'),
(14, '2019-09-03 11:39:07', 'xxxxx', 'q1_xxx_quiz', 'q1_question1', 'answer2', 'correct_answer', 'xx.xx.xx.xxxx'),
(15, '2019-09-03 11:39:07', 'xxxxx', 'q1_xxx_quiz', 'q1_question1', 'answer2', 'correct_answer', 'xx.xx.xx.xxxx'),
(16, '2019-09-03 11:39:07', 'xxxxx', 'q1_xxx_quiz', 'q1_question1', 'correct_answer', 'correct_answer', 'xx.xx.xx.xxxx'),
(17, '2019-09-03 11:39:07', 'xxxxx', 'q1_xxx_quiz', 'q1_question0', 'correct_answer', 'correct_answer', 'xx.xx.xx.xxxx');

select * from quiz_answers;
|    | id | submit_date         | session_id | quiz_name   | question_num | answer         | correct_answer | user_ip       |
|----|----|---------------------|------------|-------------|--------------|----------------|----------------|---------------|
| 1  | 1  | 03.09.2019 11:39:07 | xxxxx      | q1_xxx_quiz | q1_question0 | answer1        | correct_answer | xx.xx.xx.xxxx |
| 2  | 2  | 03.09.2019 11:39:07 | xxxxx      | q1_xxx_quiz | q1_question0 | answer2        | correct_answer | xx.xx.xx.xxxx |
| 3  | 3  | 03.09.2019 11:39:07 | xxxxx      | q1_xxx_quiz | q1_question0 | correct_answer | correct_answer | xx.xx.xx.xxxx |
| 4  | 4  | 03.09.2019 11:39:07 | xxxxx      | q1_xxx_quiz | q1_question0 | answer1        | correct_answer | xx.xx.xx.xxxx |
| 5  | 5  | 03.09.2019 11:39:07 | xxxxx      | q1_xxx_quiz | q1_question0 | answer3        | correct_answer | xx.xx.xx.xxxx |
| 6  | 6  | 03.09.2019 11:39:07 | xxxxx      | q1_xxx_quiz | q1_question0 | answer4        | correct_answer | xx.xx.xx.xxxx |
| 7  | 7  | 03.09.2019 11:39:07 | xxxxx      | q1_xxx_quiz | q1_question0 | answer3        | correct_answer | xx.xx.xx.xxxx |
| 8  | 8  | 03.09.2019 11:39:07 | xxxxx      | q1_xxx_quiz | q1_question0 | correct_answer | correct_answer | xx.xx.xx.xxxx |
| 9  | 9  | 03.09.2019 11:39:07 | xxxxx      | q1_xxx_quiz | q1_question0 | answer0        | correct_answer | xx.xx.xx.xxxx |
| 10 | 10 | 03.09.2019 11:39:07 | xxxxx      | q1_xxx_quiz | q1_question1 | answer1        | correct_answer | xx.xx.xx.xxxx |
| 11 | 11 | 03.09.2019 11:39:07 | xxxxx      | q1_xxx_quiz | q1_question1 | answer1        | correct_answer | xx.xx.xx.xxxx |
| 12 | 12 | 03.09.2019 11:39:07 | xxxxx      | q1_xxx_quiz | q1_question1 | answer3        | correct_answer | xx.xx.xx.xxxx |
| 13 | 13 | 03.09.2019 11:39:07 | xxxxx      | q1_xxx_quiz | q1_question1 | answer4        | correct_answer | xx.xx.xx.xxxx |
| 14 | 14 | 03.09.2019 11:39:07 | xxxxx      | q1_xxx_quiz | q1_question1 | answer2        | correct_answer | xx.xx.xx.xxxx |
| 15 | 15 | 03.09.2019 11:39:07 | xxxxx      | q1_xxx_quiz | q1_question1 | answer2        | correct_answer | xx.xx.xx.xxxx |
| 16 | 16 | 03.09.2019 11:39:07 | xxxxx      | q1_xxx_quiz | q1_question1 | correct_answer | correct_answer | xx.xx.xx.xxxx |
| 17 | 17 | 03.09.2019 11:39:07 | xxxxx      | q1_xxx_quiz | q1_question0 | correct_answer | correct_answer | xx.xx.xx.xxxx |

View on RexTester

我正在使用 PHP。我提供了可能的问题答案供用户选择(在数组或分隔字符串中,可能用于查询的IN() 部分?)

所以提问:q1_question0

有很多“提交”

可能的答案:answer1answer2answer3answer4 & correct answer

它被设置为在每次“尝试”回答问题时始终保存正确答案(认为以后通过这种方式获取统计数据可能更容易?)..

我正在寻找一种方法来获得计数/最大值或更好的每个答案与正确答案的百分比。

ie:类似于-

  • answer1 - 25%
  • answer2 - 50%
  • answer3 - 10%
  • answer4 - 5%
  • correct answer - 10%

甚至:

  • answer1 - 4/10
  • answer2 - 2/10
  • answer3 - 1/10
  • answer4 - 1/10
  • correct answer - 2/10

我更喜欢我认为的 %.. 所以我可以使用某种 CSS/标记来直观地创建进度条或其他东西..

此示例仅适用于 1 个问题...有 'x' 个可能的答案...但每个问题的可能答案数量不同。 (因此为什么我认为在数组/分隔字符串中可能有答案.. 用于动态查询创建)..

我不确定这是否也涉及多个子集查询? (获取每个可能答案的“统计数据”?)或者从哪里开始?

我是否尝试收集具有相同问题名称的所有条目。然后以某种方式尝试通过 IN() 子句中的特定答案将其分解,并从问题名称的记录总数中获取百分比?

编辑:

如何获得提交答案与正确答案的百分比?甚至还提供了一个工作表示例 WITH DATA。

根据提交的答案与正确答案(每个可能的可用答案)获取百分比统计信息

【问题讨论】:

标签: php mysql statistics percentage


【解决方案1】:

因为所有的志愿者仇恨者(版主)都喜欢无缘无故地投票(除了引导他们的自尊心)......

这是我最终使用的。

然后我使用了一些 PHP 来做数学运算:

$statChecker_sql = "SELECT COUNT(*) as total,
(SELECT COUNT(*) FROM image_quiz WHERE answer = 'xx1')as answer1,
(SELECT COUNT(*) FROM image_quiz WHERE answer = 'xx2') as answer2,
(SELECT COUNT(*) FROM image_quiz WHERE answer = 'xx3') as answer3,
(SELECT COUNT(*) FROM image_quiz WHERE answer = 'xx4') as answer4,
(SELECT COUNT(*) FROM image_quiz WHERE answer = 'xx5') as answer5
 FROM image_quiz;";

这是一个使用 PDO 的动态示例:

$statChecker_sql = "SELECT COUNT(*) as TOTAL, ";
for($i=0; $i<$totalPossibleAnswers; $i++){
    if($i != ($totalPossibleAnswers - 1)){      
        $statChecker_sql .= "(SELECT COUNT(*) FROM image_quiz WHERE answer = :answerValue$i) as answer$i, ";
    }else{
        $statChecker_sql .= "(SELECT COUNT(*) FROM image_quiz WHERE answer = :answerValue$i) as answer$i "; //remove trailing comma (Im sure there is a better way)..lol!!!!!
    }   
}
$statChecker_sql .= " FROM image_quiz WHERE question_num = :targetQuestion";
$statChecker_stmt = $conn->prepare($statChecker_sql);

//dynamically add the potential values for parameterized query
for($i=0; $i<$totalPossibleAnswers; $i++){
    $statChecker_stmt->bindValue(':answerValue'.$i, $quiz['question'][0]['answer'][$i]);}
$statChecker_stmt->bindValue(':targetQuestion',$targetQuestion);

$statChecker_stmt->execute();
$statChecker_stmt->setFetchMode(PDO::FETCH_ASSOC);
$statResults = $statChecker_stmt->fetch(); 
$statResultsCount = count($statResults); //current query index count

// submitted answer count * 100 \ total answers count
//output
echo '<br><br>Total Submitted Answers 1: ' . $statResults['TOTAL'] . '<br>';
echo 'Total Submitted Answers 2: ' . $statResultsCount . '<br>';
echo 'Detailed Answers breakdown: <br>';
for($z=1; $z<$statResultsCount; $z++){
    echo $z . ' - ' . $possibleAnswerArray[$z-1] . ': ' . $statResults['answer'.($z-1)] . ' / ' . $statResults['TOTAL'] . ' (' . round(($statResults['answer'.($z-1)] * 100) / $statResults['TOTAL']) . '%)' . '<br>';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2015-09-06
    • 1970-01-01
    • 2021-04-24
    • 2018-11-30
    相关资源
    最近更新 更多