2012-03-21 61 views
0

我正在计算表的正确答案字段并将计算值保存在另一个表上。为此,我使用两个查询,第一个是count查询,我使用loadResult()检索值。之后,我用这个值和日期/时间更新另一个表。问题是,在某些情况下,计算的值不会被保存,只有日期/时间。joomla-php mysql不更新以前查询的数据记录

疑问是这个样子:

 $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。

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

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

+0

解决!,错误不在该代码上,我发现执行的查询不是我认为的那个。谢谢你的答案cppl,帮助我找到错误。 – javier 2012-03-22 18:05:00

回答

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

  2. 虽然您错过了';'这在某些时候并不能解释它的工作原理。

  3. 如何定义rightAns列 - 例如:当你$rightAnsCount是0

  4. 打开的Joomla!的调试模式,并检查系统产生的出轮廓部分的SQL会发生什么,它看起来像这样

如。

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... 
+0

谢谢你这个cppl,多亏了这个,我发现另一个查询正在被打乱。 – javier 2012-03-22 18:03:20

0

你可能需要一个分号添加到SQL年底查询

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

啊,提到的某些东西CPPL是我认为最关键的。您可能需要考虑第一个查询中的空值。

更改该行:

$rightAnsCount = $db->loadResult(); 

为了这可能赚差价:

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

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

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

您也可以用这种方式通过稍微修改查询更新您的表中的所有行的所有值,这样你就可以一次去做所有的行。让我知道这是你想要达到的目标,我会重写这个例子。