【发布时间】:2011-12-14 10:36:12
【问题描述】:
我正在尝试更新一个包含员工输入数据的表。该表包含三列:条目 ID、字段 ID 和值。我想确保根据每个条目,此表中的每个字段都有一行。因此,我编写了以下 php/sql 脚本。思考过程是获取两个数组(一个包含条目 ID,另一个包含字段 ID)并检查输入表以查看每个字段和条目是否存在现有行。如果不是,则使用 inert into 命令添加值为 0 的行,但此命令失败。我的猜测是由于此功能的强度而导致的超时错误。有什么建议吗?
$db = JFactory::getDBO(); $field_query = '从 `jos_directory_field` 中选择 id'; $db->setQuery($field_query); $fields = $db->loadObjectList(); $entry_query = '从 `jos_directory_entry` 中选择 id'; $db->setQuery($entry_query); $entries = $db->loadObjectList(); for($e=0;$e 计数($entries);$e++) { for($i=0;$i 计数($fields);$i++) { $insert_query = 'INSERT INTO `jos_directory_enf` (entry_id,field_id,field_value)'; $insert_query .= 'SELECT '.$entries[$e]->id.','.$fields[$i]->id.',0'; $insert_query .= 'FROM dual WHERE NOT EXISTS (SELECT * FROM `jos_directory_enf`'; $insert_query .= 'WHERE entry_id = '.$entries[$e]->id.'和 field_id = '.$fields[$i]->id.')'; $db->setQuery($insert_query); $db->查询(); } }【问题讨论】:
-
这个炸弹是立即爆炸,还是似乎挂了?
-
表有多大——你可能会因为你的表大小而从 PHP 本身获得内存不足(嗯,可能有点不太可能)。另外,你在哪个
COMMIT级别下运行? -
您有一个名为 DUAL 的实际表吗?或者这是 ORACLE 语法的继承?
-
@MarcB 它运行了大约 30 到 60 秒,然后导致内部服务器错误。
-
@X-Zero 我对问题的假设是通过 PHP 超时。我不知道 COMMIT 级别是什么。