Mysql查询输出子查询之间的比较

发布于 2024-11-30 02:20:23 字数 2808 浏览 0 评论 0原文

当分数等于 maxScore 时,如何在查询输出上创建第三列作为“通过”或“失败”

<?php

$database =& JFactory::getDBO(); 

//Declare Variables
$user = JFactory::getUser();
$id = $user->get('id');
$name = $user->get('name');

// Display quizzes
echo "</br>";
echo "<h1>";
echo "Quizzes History for : " ;
echo "<b>";
echo $name;
echo "</h1>";
echo "</b>";


echo "</br>";
echo "</br>";

$database->setQuery(" SELECT distinct qui.title AS Course_Name,   

(SELECT sum(score) 
 FROM jos_jquarks_quizzes_answersessions     

  WHERE score IS NOT NULL AND   quizsession_id = quizSession.id     
   AND status <> -1 ) AS score, 

( SELECT count(distinct question_id)  FROM jos_jquarks_quizzes_answersessions            
WHERE quizsession_id = quizSession.id ) AS maxScore,  


DATE_FORMAT(quizSession.finished_on,'%W, %M %e, %Y @ %h:%i %p') As Finished  FROM jos_jquarks_quizsession AS quizSession  

LEFT JOIN jos_jquarks_users_quizzes AS users_quizzes ON users_quizzes.id = quizSession.affected_id    
LEFT JOIN jos_jquarks_quizzes AS qui ON users_quizzes.quiz_id = qui.id     
LEFT JOIN jos_jquarks_quizzes_answersessions AS quizSessAns ON quizSessAns.quizsession_id = quizSession.id 
LEFT JOIN jos_jquarks_sessionwho AS sessionWho ON sessionWho.session_id = quizSession.id        
LEFT JOIN jos_jquarks_users_profiles AS users_profiles ON users_profiles.user_id = sessionWho.user_id 
LEFT JOIN jos_jquarks_profiles AS profiles ON profiles.id = users_profiles.profile_id   
WHERE sessionWho.user_id =  " .$id  ) ;

if (!$database->query()) { //write data and if error occurs alert
    echo "<script> alert('".$database->getErrorMsg()."'); </script>";
}
$tableStyle = "padding: 5px;border:1px solid black"; 
$tdStyle = "padding:5px"; 
$thStyle = "padding:7px";

$row = $database->loadRowList();
if ( 0<count($row)) {
    echo '<table style="', $tableStyle, '" cellpadding="7" cellspacing="7">'; // with echo, commas are slightly more effective than dots 
    echo '<tr><th style="', $thStyle, '" align=center>Quiz Title </th><th style="', $thStyle, '" align=center> Score </th>
    <th style="', $thStyle, '" align=center>Maximum Score </th>
<th style="', $thStyle, '" align=center>Finished On </th></tr>'; 

    $row = $database->loadRowList();
    foreach($row as $valuearray) {
        echo '<tr align="center">';

        foreach($valuearray as $field){
            echo '<td style="', $tdStyle, '" align=center>', $field, '</td>'; // note: there was an error here
        } // field
        echo '</tr>'; // note: apostrophs rather than " every time it is possible
    } // $valuearray
    echo '</table>'; 
} // if count
?>

How can I create a third column on my query ouput as 'Pass' or 'Fail' when the score is equal to the maxScore

<?php

$database =& JFactory::getDBO(); 

//Declare Variables
$user = JFactory::getUser();
$id = $user->get('id');
$name = $user->get('name');

// Display quizzes
echo "</br>";
echo "<h1>";
echo "Quizzes History for : " ;
echo "<b>";
echo $name;
echo "</h1>";
echo "</b>";


echo "</br>";
echo "</br>";

$database->setQuery(" SELECT distinct qui.title AS Course_Name,   

(SELECT sum(score) 
 FROM jos_jquarks_quizzes_answersessions     

  WHERE score IS NOT NULL AND   quizsession_id = quizSession.id     
   AND status <> -1 ) AS score, 

( SELECT count(distinct question_id)  FROM jos_jquarks_quizzes_answersessions            
WHERE quizsession_id = quizSession.id ) AS maxScore,  


DATE_FORMAT(quizSession.finished_on,'%W, %M %e, %Y @ %h:%i %p') As Finished  FROM jos_jquarks_quizsession AS quizSession  

LEFT JOIN jos_jquarks_users_quizzes AS users_quizzes ON users_quizzes.id = quizSession.affected_id    
LEFT JOIN jos_jquarks_quizzes AS qui ON users_quizzes.quiz_id = qui.id     
LEFT JOIN jos_jquarks_quizzes_answersessions AS quizSessAns ON quizSessAns.quizsession_id = quizSession.id 
LEFT JOIN jos_jquarks_sessionwho AS sessionWho ON sessionWho.session_id = quizSession.id        
LEFT JOIN jos_jquarks_users_profiles AS users_profiles ON users_profiles.user_id = sessionWho.user_id 
LEFT JOIN jos_jquarks_profiles AS profiles ON profiles.id = users_profiles.profile_id   
WHERE sessionWho.user_id =  " .$id  ) ;

if (!$database->query()) { //write data and if error occurs alert
    echo "<script> alert('".$database->getErrorMsg()."'); </script>";
}
$tableStyle = "padding: 5px;border:1px solid black"; 
$tdStyle = "padding:5px"; 
$thStyle = "padding:7px";

$row = $database->loadRowList();
if ( 0<count($row)) {
    echo '<table style="', $tableStyle, '" cellpadding="7" cellspacing="7">'; // with echo, commas are slightly more effective than dots 
    echo '<tr><th style="', $thStyle, '" align=center>Quiz Title </th><th style="', $thStyle, '" align=center> Score </th>
    <th style="', $thStyle, '" align=center>Maximum Score </th>
<th style="', $thStyle, '" align=center>Finished On </th></tr>'; 

    $row = $database->loadRowList();
    foreach($row as $valuearray) {
        echo '<tr align="center">';

        foreach($valuearray as $field){
            echo '<td style="', $tdStyle, '" align=center>', $field, '</td>'; // note: there was an error here
        } // field
        echo '</tr>'; // note: apostrophs rather than " every time it is possible
    } // $valuearray
    echo '</table>'; 
} // if count
?>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甩你一脸翔 2024-12-07 02:20:23

使用变量:

SELECT DISTINCT qui.title AS Course_Name,

  @score := ( SELECT sum(score) FROM jos_jquarks_quizzes_answersessions     
     WHERE score IS NOT NULL AND quizsession_id = quizSession.id     
     AND status <> -1 ) AS score, 

  @maxScore := ( SELECT count(distinct question_id)
    FROM jos_jquarks_quizzes_answersessions            
    WHERE quizsession_id = quizSession.id ) AS maxScore,

  IF( @score = @maxScore, 'Pass', 'Fail' ) AS passOrFail

  ...

但我个人会在我的 PHP 应用程序中进行此测试。

Use variables:

SELECT DISTINCT qui.title AS Course_Name,

  @score := ( SELECT sum(score) FROM jos_jquarks_quizzes_answersessions     
     WHERE score IS NOT NULL AND quizsession_id = quizSession.id     
     AND status <> -1 ) AS score, 

  @maxScore := ( SELECT count(distinct question_id)
    FROM jos_jquarks_quizzes_answersessions            
    WHERE quizsession_id = quizSession.id ) AS maxScore,

  IF( @score = @maxScore, 'Pass', 'Fail' ) AS passOrFail

  ...

But I'd personally do this test in my PHP application.

怪我闹别瞎闹 2024-12-07 02:20:23
SELECT
    x.CourseName,
    x.score,
    x.maxScore,
    x.Finished,
    CASE
        WHEN x.score = x.maxScore THEN 'Pass'
        ELSE 'Fail'
    END AS PassFail
FROM (
    SELECT 
        distinct qui.title AS Course_Name,   
        (   SELECT sum(score) 
            FROM jos_jquarks_quizzes_answersessions     
            WHERE score IS NOT NULL AND   quizsession_id = quizSession.id AND status <> -1 
        ) AS score, 
        (   SELECT count(distinct question_id)  
            FROM jos_jquarks_quizzes_answersessions 
            WHERE quizsession_id = quizSession.id 
        ) AS maxScore,  
        DATE_FORMAT(quizSession.finished_on,'%W, %M %e, %Y @ %h:%i %p') As Finished  
    FROM jos_jquarks_quizsession AS quizSession  
    LEFT JOIN jos_jquarks_users_quizzes AS users_quizzes ON users_quizzes.id = quizSession.affected_id    
    LEFT JOIN jos_jquarks_quizzes AS qui ON users_quizzes.quiz_id = qui.id     
    LEFT JOIN jos_jquarks_quizzes_answersessions AS quizSessAns ON quizSessAns.quizsession_id = quizSession.id 
    LEFT JOIN jos_jquarks_sessionwho AS sessionWho ON sessionWho.session_id = quizSession.id        
    LEFT JOIN jos_jquarks_users_profiles AS users_profiles ON users_profiles.user_id = sessionWho.user_id 
    LEFT JOIN jos_jquarks_profiles AS profiles ON profiles.id = users_profiles.profile_id   
    WHERE sessionWho.user_id = " . $id . "
    ) x
SELECT
    x.CourseName,
    x.score,
    x.maxScore,
    x.Finished,
    CASE
        WHEN x.score = x.maxScore THEN 'Pass'
        ELSE 'Fail'
    END AS PassFail
FROM (
    SELECT 
        distinct qui.title AS Course_Name,   
        (   SELECT sum(score) 
            FROM jos_jquarks_quizzes_answersessions     
            WHERE score IS NOT NULL AND   quizsession_id = quizSession.id AND status <> -1 
        ) AS score, 
        (   SELECT count(distinct question_id)  
            FROM jos_jquarks_quizzes_answersessions 
            WHERE quizsession_id = quizSession.id 
        ) AS maxScore,  
        DATE_FORMAT(quizSession.finished_on,'%W, %M %e, %Y @ %h:%i %p') As Finished  
    FROM jos_jquarks_quizsession AS quizSession  
    LEFT JOIN jos_jquarks_users_quizzes AS users_quizzes ON users_quizzes.id = quizSession.affected_id    
    LEFT JOIN jos_jquarks_quizzes AS qui ON users_quizzes.quiz_id = qui.id     
    LEFT JOIN jos_jquarks_quizzes_answersessions AS quizSessAns ON quizSessAns.quizsession_id = quizSession.id 
    LEFT JOIN jos_jquarks_sessionwho AS sessionWho ON sessionWho.session_id = quizSession.id        
    LEFT JOIN jos_jquarks_users_profiles AS users_profiles ON users_profiles.user_id = sessionWho.user_id 
    LEFT JOIN jos_jquarks_profiles AS profiles ON profiles.id = users_profiles.profile_id   
    WHERE sessionWho.user_id = " . $id . "
    ) x
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文