使用另一个表中的数据更新表

时间:2012-03-29 12:39:09

标签: php mysql database

我有两个表,一个是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

4 个答案:

答案 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中的相应条目。