我有一个PHP语句,它循环遍历大量的foreach。
对于每个图标,需要更新DB列sequence。详情如下:
foreach ($icons as $key => $icon) {
// MySql pseudo-code:
UPDATE `tbl_icon2album`
SET `sequence`= $key +1
WHERE iconID= $icon['id']
}My problem:对于大量的图标来说,这变得非常慢。
我的问题:我可以通过执行一个MySql命令来加快速度吗?这个命令将以某种方式包含foreach循环吗?
非常感激..。
发布于 2013-12-12 15:38:39
您可以将所有更新放在另一个表中,并使用单个查询进行更新。
UPDATE tbl_icon2album, some_other_table
SET sequence = some_other_table.new_key_value
WHERE iconID = some_other_table.icon_reference发布于 2013-12-12 15:50:05
您正在更新多少个键?是迭代速度慢,还是您做了数千次?
你可以用"in“子句。
ie:
update table set key=key+1 where blah in ('1','2','3');您可以遍历for循环来构造传递给in的变量:
ie:
$iconlist = "";
foreach ($icons as $key => $icon) {
if (!$iconlist) { $iconlist = "($icon" }
else
{ $iconlist .= ",$icon" }
}
if ($iconlist) {
$iconlist .= ")";
$query = "update table set key=key+1 where icon in $iconlist";
}发布于 2013-12-12 15:35:39
如果使用准备好的陈述,则可以准备查询一次,绑定参数,然后在循环中执行。这可能会更快,因为它通常是准备占用时间的查询。例如:
$stmt = $mysqli->prepare("
UPDATE
`tbl_icon2album`
SET
`sequence` = ?
WHERE
`iconID` = ?
");
$stmt->bind_param('ii', $sequence, $icon_id);
foreach ($icons as $key => $icon)
{
$sequence = $key + 1;
$icon_id = $icon['id'];
$stmt->execute();
}https://stackoverflow.com/questions/20547486
复制相似问题