我有两个表,一个是tbl_demographics,有coluimns [staffid,natid],另一个是tbl_nationality,有列[natid,description]。
人力资源部门以exits的身份和国籍向我发送员工数据。唯一的问题是国籍栏包含的数据如加拿大而不是(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
答案 0 :(得分:0)
创建一个地图,其中key是country的全名,value是缩写。对于国家/地区字段,如果密钥位于地图中,则使用该值作为其他国家/地区使用来自hr的密钥/条目
答案 1 :(得分: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++;
}
然后应该选择不正确的变量并纠正它们。
答案 2 :(得分: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
表中的描述相符。
答案 3 :(得分: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中的相应条目。