【发布时间】:2013-03-10 22:39:18
【问题描述】:
我有 2 个数组:
$questions: pid => name
$answers: pid => rid
它在数据库中插入所有问题(pid),如果有答案(rid)则插入答案;如果没有答案,则插入 0。
foreach($questions as $value) {
$idanswer = ($answers[$value[pid]]) ? $answers[$value[pid]] : 0;
$idquestion = $value[pid];
$sql = "INSERT INTO solucion ( rid, pid) VALUES ( '$idanswer ', '$idquestion ')";
$db - > query($sql);
}
在我缺乏经验的情况下,我几乎对所有事情都使用 foreach,但在这种情况下太慢了。有什么建议吗?
【问题讨论】:
-
我非常怀疑这与
foreach有什么关系,而是与您的数据库查询有关。 -
In my inexperience, I use foreach for almost everything很遗憾听到这个消息。相反,您应该为所有新行形成 oneINSERT查询。 -
@Svish:
INSERT会很快;其中1,500个不会。将单个INSERT包装在foreach中是错误的。 -
@LightnessRacesinOrbit 我可以向您保证,如果您删除
$db->query($sql);,循环将接近瞬时。它正在运行需要时间的查询,这意味着解决方案,就像其他人已经在这里回答的那样,是尽量减少您运行的查询数量。与“foreach 的速度”无关。 -
@Svish:同意。但是,当 OP 选择使用
foreach来解决导致延迟的问题时,试图声称它与foreach无关似乎是一件奇怪的事情。无论如何,事实证明我们都在用相反的方式说同样的话。 :)