2012-03-21 71 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(); 

您也可以用這種方式通過稍微修改查詢更新您的表中的所有行的所有值,這樣你就可以一次去做所有的行。讓我知道這是你想要達到的目標,我會重寫這個例子。