使用电话前缀填充区域字段

时间:2011-11-26 10:37:06

标签: php mysql

是否可以根据存储在另一个字段中的数据填充字段?我更好地解释了一下:在数据库中有一个字段“telnum”(电话号码),其中存储了带有国际前缀的telepnone号码。我可以使用php命令在每个数字的前缀函数中填充“country”字段吗?

这是数据库:

  ______________________________________________
  |  id  |   telnum   |   name   |   country   |
  ----------------------------------------------
  |  01  | 003912377  |   Smith  |             |
  |  02  | 004412345  |   White  |             |
  |  03  | 005454321  |   Lopez  |             |

“php命令”应该与我的sql表中的国家名称的每个不同前缀相关联。在示例中,我们有0039 - >意大利,0044 - >英国,0054 - >阿根廷......等等。 结果必须是:

  ______________________________________________
  |  id  |   telnum   |   name   |   country   |
  ----------------------------------------------
  |  01  | 003912377  |   Smith  |   Italy     |
  |  02  | 004412345  |   White  |    UK       |
  |  03  | 005454321  |   Lopez  |  Argentina  |

提前感谢大家的帮助。 问候,Mattew

3 个答案:

答案 0 :(得分:1)

您可以在查询中使用case语句

update table
set country =
case 
when left(telnum,4) = 0039 then 'Italy'
when left(telnum,4) = 0044 then 'UK'
when left(telnum,4) = 0054 then 'Argentina'
else ''
end

答案 1 :(得分:0)

YES,

如果您已有国家/地区代码映射 (这意味着另一个带有country_code + country_name的表),
你可以执行INNER JOIN,如: -

 select u.id, u.telnum, u.name, c.country_name
 from user as u
 inner join country c
 on left(u.telnum, 4) = c.country_code
 ...;

否则,您可以将映射放入PHP配置文件中 格式如

$country_code = array();
$country_code['0039'] = ...;

然后当你从mysql迭代结果时,
你可以做相应的映射

答案 2 :(得分:0)

mySQL查询方式:

UPDATE telcountry_table
SET country =
CASE 
   WHEN left(telnum,4) = 0093 THEN 'Afghanistan'
   WHEN left(telnum,5) = 00355 THEN 'Albania'
   WHEN left(telnum,5) = 00213 THEN 'Algeria'
   .
   .
   .
   ELSE ''
END

完整版查询:https://gist.github.com/1395484#file_mysql_phoneprefix_to_zone_field.sql

php方式:

$call_code = array();
$call_code['93']='Afghanistan';
$call_code['355']='Albania';
$call_code['213']='Algeria';
.
.
.

$func = function($value) {
   $code2=substr($value['telnum'],2,2);
   $code3=substr($value['telnum'],2,3);
   $code4=substr($value['telnum'],2,4);
   if(array_key_exists($code2,$call_code))
      $value['country']=$call_code[$code2];
   else if(array_key_exists($code3,$call_code))
      $value['country']=$call_code[$code3];
   else if(array_key_exists($code4,$call_code))
      $value['country']=$call_code[$code4];
   return $value;
};

$countries=array_map($func,$data);

完整版脚本:https://gist.github.com/1395484#file_php_phoneprefix_to_zone_field.php