2011-11-26 1 views
1

다른 필드에 저장된 데이터의 기능으로 필드를 채울 수 있습니까? 나는 더 잘 설명한다. 데이터베이스에는 국제 전화 번호가있는 텔 픈 번호가 저장된 "telnum"(전화 번호) 필드가 있습니다. 내가 php 명령을 사용하여 각 번호의 접두사의 기능에 "국가"필드를 채울 수 있습니까?전화 접두사의 기능으로 영역 필드 채우기

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

은 "PHP는 명령"내 SQL 테이블에 각기 다른 접두사에 국가 이름을 연결해야합니다

는 데이터베이스입니다. 이 예에서는 0039 -> Italy, 0044 -> UK, 0054 -> Argentina ... 등이 있습니다. 결과이 있어야합니다 : 당신의 도움을 모두에게 사전에

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

감사합니다. 이미 국가 코드 매핑
(즉 COUNTRY_CODE + COUNTRY_NAME으로 다른 테이블을 의미입니다)이있는 경우 인사말, 매튜

답변

1

당신은, 쿼리

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 
+0

이봐, 정말 감사합니다! 나는 당신의 대답의 코드를 매우 쉽고 유용하게 찾았으며 완벽하게 작동합니다. 동일한 스크립트를 사용하여 더 많은 필드를 채울 수 있습니까? 예를 들어 접두어가 이탈리아 인 경우 필드 대륙 "eu"를 추가하고 아르헨티나의 경우 "america"를 추가하고 싶습니다. 미리 감사드립니다. – mattew

0

YES 내

case 문을 사용할 수 있습니다
다음과 같은 내부 결합을 수행 할 수 있습니다. -

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 
...; 
당신이 MySQL의에서 결과를 반복 할 때 16,

그렇지 않으면, 당신은 그런

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

같은 형식과 더불어, PHP 설정 파일에
를 매핑을 넣을 수
는 그에 따라

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 

전체 버전의 쿼리 : 01 2,373,

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

+0

정말 고마워요! 내가 다른 친구에게 말했듯이, 나는 매우 쉽고 유용한 코드를 찾았고 완벽하게 작동합니다 (여러분의 nswer의 "MySQL 쿼리 방법"을 참조하십시오). 동일한 스크립트 구조를 사용하여 더 많은 필드를 채울 수 있습니까? 예를 들어 접두어가 이탈리아 인 경우 필드 대륙 "eu"를 추가하고 아르헨티나의 경우 "america"를 추가하고 싶습니다. 그렇지 않으면 내가 어떻게 글로벌 스크립트 (MyQSL 방식)을 수정해야합니까? 사전에 감사드립니다. – mattew

+0

'country = CASE ... END' 뒤에 다음과 같이 다른 열을 설정하십시오. add', continent = CASE ** 국가 이름을 대륙 코드로 대체하십시오. ** END' – rogal111