我有一堆编码数字代表美国的每个县。每个县的代码都是唯一的,由两位数的州代码和一个基于县的三位数的奇数组成。
例如,在我的SQL数据库中,德克萨斯州是代码42.德克萨斯州达拉斯县是42113;德克萨斯州道森县是42115.
我试图将这些代码与另一个包含类似代码但具有不同状态代码的DB表匹配。在这个数据库中,德克萨斯州是代码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 * '。
出于某种原因,我无法围绕一种有效地做到这一点的方式。有什么想法吗?
答案 0 :(得分:1)
临时修复,直到您可以从轨道上钻取数据库(这是确保......的唯一方法)并构建一个合适的数据库:
$county_translations = array(
'bad_id' => 'new_id'
...
);
$fixed_county = $county_translations[$row['county_id']];
答案 1 :(得分: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代码),并用“正确的”一位或两位数代码替换它们。
那些建议DB需要被炸毁的人:你是对的,我不知道他们为什么不只是使用正确的FIPS代码开始。但是在这一点上,我们已经把waaaaaaaaaaaaaaya吹过了改变它有意义的地步。