使用一个查询更新大型数据库

时间:2012-12-30 14:51:28

标签: php mysql

我有一个数据库,包含1,725,213个CM23 5YF格式的邮政编码条目。我想将其更改为CM235YF,只需从中移除空格并在新列(Wardcode)中对其进行评分。
表格

邮政编码 Wardcode
 这是我正在使用的

功能

//*** Select * from uk_data
                function uk_pc_data($id){
                global $host, $dbname, $user, $pass;
                $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
                $DBH->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); ///*** for error handling 165000
                $STH = $DBH->query("SELECT * from uk_pc order by Postcode asc LIMIT $id, 50000");
                $STH->setFetchMode(PDO::FETCH_ASSOC);
                return $STH;
            }
            //*** Update Cat10 with Post code
                function uk_pc_update_wardcode(){
                global $host, $dbname, $user, $pass;
                $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
                $DBH->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
                $STH = $DBH->prepare("update uk_pc SET 
                Wardcode   = :cat10
                WHERE Postcode = :Postcode
                ");

                $STH->bindValue(':Postcode' , $Postcode);
                $STH->bindValue(':cat10' , $cat10);

                return $STH;
            }

以这种方式使用

$q = $_GET['id'];

$STH1 = uk_pc_data($q);
        while (($row = $STH1->fetch()) !== false) {
    $pc_o = change_text(' ', '', $row['Postcode']);

    $data_insert   = array(':cat10'=>$pc_o , ':Postcode'=>$row['Postcode']);
    $STH = uk_pc_update_wardcode();
    $STH->execute($data_insert);
    echo $pc_o .'<br>';

    }

有没有一些简单的方法来改变它。我的脚本正在运行,但我想知道有没有其他方法我可以使用,只有一个脚本可以做到这一切?

1 个答案:

答案 0 :(得分:1)

UPDATE postcodes SET new_column = REPLACE(old_column, ' ', '')

但你必须先创建new_column。