1

我有一堆代表美国每个县的编码数字。每个县的代码都是唯一的,由两位数的州代码和基于县的三位奇数组成。

例如,在我的 SQL 数据库中,德克萨斯州的代码是 42。德克萨斯州达拉斯县是 42113;德克萨斯州道森县是 42115。

我正在尝试将这些代码与另一个包含类似代码但具有不同状态代码的数据库表进行匹配。在这个数据库中,德克萨斯州的代码是 45,所以达拉斯县是 45113。所以,即使我有正确的数据,代码也没有正确匹配。

这是我目前提取数据的方式。

$result = mysql_query("SELECT county_id,county,state FROM data GROUP BY county_id");
$rows = array();
while($row = mysql_fetch_array($result)) {
    $county_id          = $row['county_id'];
    $county             = $row['county'];
    $state              = $row['state'];
    array_push($rows,$row);
    printf ("%s,%s,%s\n<br>", $row['county_id'], $row['county'], $row['state']);

}

这给了我美国每个州的编码列表

我需要做的是将每个county_id 转换为正确的州代码号码,同时保持每个代码的最后三位数字相同。即如果字符串'state'的值为TX,那么我需要将'45113'中的'45'改为'42113'。如果字符串 'state' 的值为 WV,我想将 '47* ' 中的 '47' 更改为 '12* '。

出于某种原因,我只是想不出一种有效地做到这一点的方法。有任何想法吗?

4

2 回答 2

1

临时修复,直到您可以从轨道上删除您的数据库(这是确定的唯一方法......)并建立一个合适的:

$county_translations = array(
    'bad_id' => 'new_id'
    ...
);

$fixed_county = $county_translations[$row['county_id']];
于 2013-08-27T14:51:39.790 回答
0

我已经设法通过使用 substr_replace 解决了我自己的问题。

while($row = mysql_fetch_array($result)) {
$county_id = $row['county_id'];
$county_count = $row['county_count'];
$state = $row['state'];
if ($state == "AL")
        {
        $county_id_al = substr_replace($county_id,'1',0,1);
        echo $county_id_al;
        echo ",";
        echo $county_count;
        echo "<br>";
        }

等等。这将检查条目的状态,然后删除第一个(或前两个数字,取决于现有的 ID 代码)并用“正确的”一个或两个数字代码替换它们。

那些建议数据库需要被炸毁的人:你是对的,我不知道他们为什么不只是使用正确的 FIPS 代码开始。但在这一点上,我们已经把 waaaaaaaay 吹到了改变它有意义的地步。

于 2013-08-28T16:26:00.690 回答