joomla php mysql不使用来自上一个查询的数据更新记录

joomla php mysql不使用来自上一个查询的数据更新记录,php,mysql,joomla,Php,Mysql,Joomla,我正在计算一个表的right answers字段,并将计算出的值保存到另一个表中。为此,我使用了两个queryyes,第一个是count查询,我使用loadResult()检索值。之后,我用这个值和日期/时间更新另一个表。问题是,在某些情况下,计算值不会被保存,只保存日期/时间 查询如下所示: $sql = 'SELECT count(answer) FROM #_questionsTable WHERE

我正在计算一个表的right answers字段,并将计算出的值保存到另一个表中。为此,我使用了两个queryyes,第一个是count查询,我使用loadResult()检索值。之后,我用这个值和日期/时间更新另一个表。问题是,在某些情况下,计算值不会被保存,只保存日期/时间

查询如下所示:

        $sql = 'SELECT count(answer)

                FROM #_questionsTable
                WHERE 

                    answer = 1

                    AND

                    testId = '.$examId;

        $db->setQuery($sql);

        $rightAnsCount = $db->loadResult();

        $sql = 'UPDATE #__testsTable

                SET finish = "'.date('Y-m-d H:i:s').'", rightAns='.$rightAnsCount.'

                WHERE testId = '.$examId;

        $db->setQuery($sql);

        $db->Query();
答案=1表示问题的答案为ok

我认为当第二个查询被执行时,第一个查询还没有完成,但是我读到的每一处都说它等待第一个查询完成,然后转到第二个查询,我不知道如何让第二个查询等待第一个查询结束


任何帮助都将不胜感激。谢谢

您可能需要在sql查询的末尾添加分号

...testId = '.$examID.';';
啊,政协提到的一些东西,我想是关键。您可能需要考虑第一次查询中的空值

更改此行:

$rightAnsCount = $db->loadResult();
这可能会带来不同:

$rightAnsCount = ($db->loadResult()) ? $db->loadResult() : 0;
如果没有结果,则基本设置为0

  • PHP MySQL查询是同步的,即在返回-Joomla!之前完成的数据库类不实现任何类型的异步或回调功能

  • 当你错过一个“;”的时候但这并不能解释为什么它会在某些时候起作用

  • 如何定义
    rightAns
    列?例如,
    $rightanscont
    为0时会发生什么

  • 打开约姆拉!”s debug模式,并检查在概要文件部分中生成的SQL,它如下所示

  • 例如

    配置文件信息
    应用程序后加载:0.002秒,1.20 MB
    初始化后的应用程序:0.078秒,6.59 MB
    应用程序后路由:0.079秒,6.70 MB
    应用程序发送后:0.213秒,7.87 MB
    应用程序后渲染:0.220秒,8.07 MB
    内存使用
    8511696
    记录了8个查询。
    选择*
    来自jos_会议
    其中session_id='5CS53HOH2HQI9CCQ69BRDITM7'
    删除
    来自jos_会议
    其中(时间<'1332089642')
    等
    
    我确信您可以在一个查询中完成此操作:

        $sql = 'UPDATE #__testsTable
    
                SET finish = NOW()
                , rightAns = (
                   SELECT count(answer)
                     FROM #_questionsTable
                     WHERE 
                        answer = 1
                        AND
                        testId = '.$examId.'
                )
    
                WHERE testId = '.$examId;
    
        $db->setQuery($sql);
        $db->Query();
    

    您还可以通过稍微修改查询,以这种方式更新表中所有行中的所有值,以便一次完成所有行。让我知道这是否是您想要实现的目标,我将重写示例。

    感谢您提供此CPP,由于此,我发现另一个查询正在被修改。已解决!,错误不在代码上,我发现执行的查询不是我认为的查询。谢谢cppl的回答,帮我找到了错误。
        $sql = 'UPDATE #__testsTable
    
                SET finish = NOW()
                , rightAns = (
                   SELECT count(answer)
                     FROM #_questionsTable
                     WHERE 
                        answer = 1
                        AND
                        testId = '.$examId.'
                )
    
                WHERE testId = '.$examId;
    
        $db->setQuery($sql);
        $db->Query();