joomla-php mysql没有使用先前查询中的数据更新记录

时间:2012-03-21 04:11:11

标签: php mysql joomla

我正在计算表格的正确答案字段并将该计算值保存在另一个表格上。为此,我使用两个查询,第一个是计数查询,我使用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();

answer = 1表示问题已得到解答。

我认为当执行第二个查询时,第一个查询尚未完成,但我读到的任何地方都说它等待第一个查询完成到第二个,我不知道如何制作第二个查询等待第一个查询结束。

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

3 个答案:

答案 0 :(得分:2)

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

  2. 你错过了';'这不会说明它在某些时候有效。

  3. 如何定义rightAns列 - 例如。当$rightAnsCount为0

  4. 时会发生什么
  5. 打开Joomla!的调试模式并检查在配置文件部分生成的SQL,它看起来像这样

  6. 例如

    Profile Information
    
    Application afterLoad: 0.002 seconds, 1.20 MB
    Application afterInitialise: 0.078 seconds, 6.59 MB
    Application afterRoute: 0.079 seconds, 6.70 MB
    Application afterDispatch: 0.213 seconds, 7.87 MB
    Application afterRender: 0.220 seconds, 8.07 MB
    Memory Usage
    
    8511696
    8 queries logged.
    
    SELECT * 
          FROM jos_session 
          WHERE session_id = '5cs53hoh2hqi9ccq69brditmm7'
    DELETE 
          FROM jos_session 
          WHERE ( TIME < '1332089642' )
    etc...
    

答案 1 :(得分:0)

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

...testId = '.$examID.';';

啊,cppl提到的东西是我想的关键。您可能需要考虑第一个查询中的空值。

更改此行:

$rightAnsCount = $db->loadResult();

这可能会有所不同:

$rightAnsCount = ($db->loadResult()) ? $db->loadResult() : 0;

如果没有结果,基本上设置为0.

答案 2 :(得分:0)

我很确定你可以在一个查询中执行此操作:

    $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();

您还可以通过稍微修改查询来更新表中所有行的所有值,这样您就可以一次性完成所有行。让我知道,如果这是你想要实现的目标,我将重写这个例子。