我正在计算表格的正确答案字段并将该计算值保存在另一个表格上。为此,我使用两个查询,第一个是计数查询,我使用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表示问题已得到解答。
我认为当执行第二个查询时,第一个查询尚未完成,但我读到的任何地方都说它等待第一个查询完成到第二个,我不知道如何制作第二个查询等待第一个查询结束。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:2)
PHP MySQL查询是同步的,即。它在返回之前完成 - Joomla!的数据库类没有实现任何类型的异步或回调功能。
你错过了';'这不会说明它在某些时候有效。
如何定义rightAns
列 - 例如。当$rightAnsCount
为0
打开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...
答案 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();
您还可以通过稍微修改查询来更新表中所有行的所有值,这样您就可以一次性完成所有行。让我知道,如果这是你想要实现的目标,我将重写这个例子。