【问题标题】:Combining 2 Fields in one table for 43,000 records将 2 个字段组合在一个表中,用于 43,000 条记录
【发布时间】: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


【解决方案1】:
UPDATE locations 
  JOIN states_cache
    ON states_cache.StateInitials = locations.StateInitials
SET states_cache.StateName = locations.StateName, locations.Combo = CONCAT(locations.City, ' ', locations.StateInitials) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2018-10-20
    • 2016-01-19
    相关资源
    最近更新 更多