2012-03-29 70 views
0

我有两个表一个tbl_demographics与coluimns [staffid,natid]和另一个tbl_nationality与列[natid,说明]。更新表与另一个表的数据

人力资源发送给我的员工数据与我上传的员工身份和国籍一致。唯一的问题是国籍栏包含的数据如加拿大而不是(CAN)或奈及利亚而不是(NGA)。

如何在sql(甚至php)中编写脚本,可以将tbl_demographics中的所有natid都更新为与tbl_nationality中的正确natid相对应的数据?我正在使用MySQL服务器(如果有必要,PHP)。

数据他们送:

staffid | natid 

201001 | Canadian 

202332 | Nigerian 

预计表看:

staffid | natid (tbl_demographics) 

201001 | CAN 
202332 | NGA 


natid | description (tbl_nationality) 

CAN  | Canada 
NGA  | Nigeria 
+1

您还需要在tbl_nationality中拥有“加拿大”而不是“加拿大”等,或者他们之间的关系一致。 – Stefan 2012-03-29 12:59:25

回答

0

使用此,假设您将HR Excel数据表中的所谓tbl_excel(仅适用于SQL):

UPDATE tbl_demographics d, tbl_nationality n, tbl_excel e 
SET d.nat_id = n.natid 
WHERE n.description = e.description 
    AND e.staffid = d.staffid 

这当然需要他们发送(加拿大,加拿大)的数据描述符合描述在tbl_nationality表上。

0

创建地图,关键是国内的全名和值是缩写符号。对于国家字段,如果关键是在地图中使用该值作为其他国家使用的键/条目从小时

0

简单:

$count = 0; 
$result = mysql_query("SELECT * FROM tbl_nationality"); 
while ($source = mysql_fetch_array($result)) { 
    $nationality[$count] = $source['description']; 
    $natid[$count] = $source['natid']; 
    $count++; 
} 

$num = 0; 
$result = mysql_query("SELECT * FROM tbl_demographics"); 
while ($source = mysql_fetch_array($result)) { 
    $count = 0; 
    while (isset($natid[$count])) { 
    if ($source['natid'] == $nationality[$count]) { 
     $index[$num] = $source['staffid']; 
     $correctid[$num] = $natid[$count]; 
     $num++; 
    } 
    $count++; 
    } 
} 
$num = 0; 
while (isset($index[$num])) { 
    mysql_query("UPDATE tbl_demographics SET `natid` = '$correctid[$num]' WHERE `staffid` = '$index[$num]'"); 
    $num++; 
} 

应该然后选择是不正确的变量和纠正。

0
$query_demo = "SELECT * FROM tbl_demographics"; 
$res_demo = mysql_query($query_demo); 
while ($row = $mysql_fetch_assoc($res_demo)) { 
    $query_nat = "SELECT natid FROM tbl_nationality WHERE description='" . $row["description"] . "'"; 
    $res_nat = mysql_query($query_nat); 
    $arr_nat = $mysql_fetch_assoc($res_nat); 
    if ($arr_nat) { 
     $query_update = "UPDATE tbl_demographics SET natid='" . $arr_nat["natid"] . "' WHERE staffid=" . $row["staffid"]; 
     mysql_query($query_update); 
    } 
} 

编辑:这是假设tbl_demographics最初包含一些错误natids,而且错natids对应于tbl_nationality发现的描述。

我的代码循环遍历最初的'错误'tbl_demographics,在tbl_nationality中查找相应的描述,从那里读取natid,并更新tbl_demographics中的相应条目。