2012-03-29 29 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中的相應條目。