【发布时间】:2014-03-23 05:33:07
【问题描述】:
我有一个代码,我想将同一个表中的 2 个字段组合到同一个表中的另一个字段,并从另一个表中填写 StateName
locations 表有 43,000 条记录
我想改一下
Table: states_cache Table: locations
StateName | StateInitials LocationID | City | StateInitials | StateName | Combo
------------------------ --------------------------------------------------------------
Missouri | MO 32500 | Springfield | MO | |
Kansas | KS 34151 | Topeka | KS | |
到这里
Table: states_cache Table: locations
StateName | StateInitials LocationID | City | StateInitials | StateName | Combo
------------------------ --------------------------------------------------------------
Missouri | MO 32500 | Springfield | MO | Missouri | Springfield MO
Kansas | KS 34151 | Topeka | KS | Kansas | Topeka KS
这是我的代码...
我尝试运行它,它只是给了我加载屏幕...
$conn = &$GLOBALS["dbSettings"]->GetConnection();
$sql = "SELECT City, StateInitials, LocationID, StateInitials FROM locations";
$rs = $conn->Execute($sql);
while (!$rs->EOF)
{
$sql2 = "SELECT StateName FROM states_cache WHERE StateInitials ='" . $rs->fields[3] . "'";
$rs2 = $conn->Execute($sql2);
if ($rs2 === false) die('select error: ' . $conn->ErrorMsg() . " SQL: " . $sql2);
$sql1 = "UPDATE locations SET StateName ='" . $rs2->fields[0] . "', combo ='" . $rs->fields[0] . " " . $rs->fields[1] ."' where LocationID =" . $rs->fields[2];
$rs1 = $conn->Execute($sql1);
if ($rs1 === false) die('select error: ' . $conn->ErrorMsg() . " SQL: " . $sql1);
echo $sql1;
}
?>
-------已解决---------------------------- ---
UPDATE locations
JOIN states_cache
ON states_cache.StateInitials = locations.StateInitials
SET states_cache.StateName = locations.StateName, locations.Combo = CONCAT(locations.City, ' ', locations.StateInitials)
感谢 Marc B 为我指出一个更简单的解决方案
【问题讨论】:
-
没有必要循环运行这些查询。您可以使用单个
update ... join查询来完成此操作。 -
好的,我会研究的
-
谢谢,这样容易多了....
-
更新位置 JOIN states_cache ON states_cache.StateInitials = locations.StateInitials SET states_cache.StateName = locations.StateName, locations.Combo = CONCAT(locations.City, ' ', locations.StateInitials)
标签: php mysql loops while-loop