Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用另一个表中的数据更新表_Php_Mysql_Database - Fatal编程技术网

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

Php 使用另一个表中的数据更新表,php,mysql,database,Php,Mysql,Database,我有两个表,一个是tbl_人口统计表,其中有coluimns[staffid,natid],另一个是tbl_国籍表,其中有[natid,description]列 人力资源部以excel格式向我发送员工数据,其中包含我上传的员工姓名和国籍。唯一的问题是“国籍”列包含的数据是加拿大而不是(CAN)或尼日利亚而不是(NGA) 如何用sql(甚至php)编写脚本,将tbl_人口统计中的所有natid更新为与正确的tbl_natid对应的数据?我使用的是mysql服务器(必要时还可以使用php) 他们发

我有两个表,一个是tbl_人口统计表,其中有coluimns[staffid,natid],另一个是tbl_国籍表,其中有[natid,description]列

人力资源部以excel格式向我发送员工数据,其中包含我上传的员工姓名和国籍。唯一的问题是“国籍”列包含的数据是加拿大而不是(CAN)或尼日利亚而不是(NGA)

如何用sql(甚至php)编写脚本,将tbl_人口统计中的所有natid更新为与正确的tbl_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

创建一张地图,其中键为国家全名,值为Abrevision。对于国家/地区字段,如果键位于地图中,则使用值作为国家/地区,否则只需使用hr中的键/条目即可:

$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++;
}

然后选择不正确的变量并进行更正。

使用此选项,假设您将HR excel数据放在名为
tbl\u excel
的表中(仅SQL):

当然,这需要他们发送的数据描述(加拿大、加拿大)与
tbl_national
表中的描述相匹配

$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_人口统计最初包含一些错误的国家,并且错误的国家对应于tbl_国籍中的描述

我的代码循环遍历初始的“错误”tbl_人口统计信息,查找tbl_国籍中的相应描述,从那里读取natid,并更新tbl_人口统计信息中的相应条目。

tbl_国籍中还需要有“加拿大人”而不是“加拿大”等,或者它们之间的关系保持一致。
$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);
    }
}