加快此代码的提示

MrF*_*dge 0 php mysql performance query-optimization

任何人都可以建议提示或更改,以使此代码更清洁,更快?这是我在周五晚上想到的唯一方法,但我确信必须有一种更有效的方法来做到这一点......

我知道正则表达式没有效率,但我不能老实说看到我还能做到这一点,特别是如果邮政编码数据可以来自:

e1 2be e1ebe e10ebe e10 ebe ex1 ebe ex1ebe

等等...

非常感谢任何编码技巧,H

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Amma Gawd! Someone ate our database!');
    mysql_select_db($dbname);
    $result = mysql_query("SELECT * FROM `Consumer`
            WHERE left(`Postcode`,2) = 'E' 
            OR left(`Postcode`,1) = 'N'
            OR left(`Postcode`,1) = 'W'");
    while($row = mysql_fetch_array($result))  { 
        $email =  $row['Email'];
        if (preg_match("/^[Ee]{1}[0-9]{2}/",$row['Postcode'])) {
            mysql_query("UPDATE `Consumer` SET `CONYES` = '1' WHERE `Email` = '$email'") or die ("Bugger");
            $counter = $counter +1;
        } elseif (preg_match("/^[Nn]{1}[0-9]{2}/",$row['Postcode'])) {
            mysql_query("UPDATE `Consumer` SET `CONYES` = '1' WHERE `Email` = '$email'") or die ("Bugger");
            $counter = $counter +1;     
        } elseif (preg_match("/^[Ww]{1}[0-9]{2}/",$row['Postcode'])) {
            mysql_query("UPDATE `Consumer` SET `CONYES` = '1' WHERE `Email` = '$email'") or die ("Bugger");
            $counter = $counter +1; 
        }   
    }

    $result1 = mysql_query("SELECT * FROM `Consumer`
            WHERE left(`postcode`,2) = 'BR' 
            OR left(`postcode`,2) = 'CR'
            OR left(`postcode`,2) = 'EC'
            OR left(`postcode`,2) = 'EN'
            OR left(`postcode`,2) = 'KT'
            OR left(`postcode`,2) = 'NW'
            OR left(`postcode`,2) = 'RM'
            OR left(`postcode`,2) = 'SE'
            OR left(`postcode`,2) = 'SM'
            OR left(`postcode`,2) = 'SW'
            OR left(`postcode`,2) = 'TW'
            OR left(`postcode`,2) = 'WC'
            OR left(`postcode`,2) = 'BD'
            OR left(`postcode`,2) = 'HG'
            OR left(`postcode`,2) = 'LS'
            OR left(`postcode`,2) = 'WF'
            OR left(`postcode`,2) = 'YO'
            OR left(`postcode`,2) = 'HD'
            OR left(`postcode`,2) = 'HX'");
    while($row1 = mysql_fetch_array($result1))  {   
        $email =  $row1['Email'];
        mysql_query("UPDATE `Consumer` SET `CONYES` = '1' WHERE `Email` = '$email'") or die ("Bugger");
        $counter = $counter +1; 
    }
    echo $counter;
    mysql_close($conn);
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 6

您将其作为PHP问题发布,但我认为最有效的方法是在一个SQL查询中完成所有操作并让数据库完成工作.您可以使用关键字"RLIKE"来使数据库执行正则表达式匹配.你应该阅读语法以获得你想要的东西,但是为了让你开始,你需要这样的东西:

UPDATE `Consumer` SET `CONYES` = '1'
    WHERE `Postcode` RLIKE '[EeNnWwBbMm][0-9]{2}'
    OR LEFT(`postcode`,2) IN ('BR', 'CR', 'EC', 'EN', 'KT', 'NW', 'RM'.....
Run Code Online (Sandbox Code Playgroud)

结果是更改的行数,可以直接分配给$ counter.