Gus,
我有一个代码,基本上复制一堆记录在一个数据库,并将其复制到另一个。我需要对许多记录执行此操作,因此我构建了一个数组,其中包含每次修改查询的变量。下面是我的数组的结构:
$array = [
["Brent_Chart_1", $List_Brent_Chart_1],
["Brent_Chart_2", $List_Brent_Chart_2],
["Brent_Chart_3", $List_Brent_Chart_3],
et..... ]
这里是遍历数组并执行SQL查询的循环:
foreach ($array as list($a, $b)) {
$queryx = "
UPDATE `meetings_ss`
SET `".$a."`= (
SELECT `Data`
FROM `charts`
WHERE `ID` = ".$b."
)
ORDER BY `ID` DESC LIMIT 1;";
mysql_query($queryx);
}
问题如下:由于某种原因,前9条记录按预期复制,然后从第10条开始没有复制。我知道变量名等没有问题,如果我从第10条记录开始循环,我就会遇到同样的问题:前9条记录被复制,但在第10条记录失败。
这让我认为这是一个内存问题,或者也许这不是正确的方式来处理多个SQL查询?谁能给出一个失败的原因?
感谢您的宝贵时间。
您的订单by和limit不在子查询中。Update子句不能有"order"或"limit":)
试着这样修改你的代码:
foreach ($array as $row) {
$queryx = 'UPDATE meetings_ss SET
' . $row[0] . ' = (SELECT Data FROM charts
WHERE ID = ' . $row[1] . ' ORDER BY ID DESC LIMIT 1)';
mysql_query($queryx);
}
代码没有问题。问题在于数据库结构和连续的SQL查询最终会破坏行大小:
#1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.