2012-03-29 83 views
0

私はcoluimns [staffid、natid]とカラム[natid、description]を持つ別のtbl_nationalityを持つ2つのテーブルtbl_demographicsを持っています。別のテーブルのデータでテーブルを更新する

人事部は私がアップロードしたスタッフIDと国籍で私のスタッフデータを送信します。国籍の列には、(CAN)の代わりにカナディアン、(NGA)の代わりにナイジェリアのようなデータが含まれているだけです。

tbl_demographicsのすべてのnatidをtbl_nationalityの正しいnatidに対応するデータに更新できるスクリプトをSQL(またはPHPの偶数)に書き込むにはどうすればよいですか?私は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の "Canada"の代わりに "Canadian"などが必要です。 – Stefan

答えて

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

は、キーが国と値の完全な名前が略語であるマップを作成します。

$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

からキー/エントリを使用するよう国フィールドのために、値を使用します。

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); 
    } 
} 

EDIT:これはtbl_demographicsが最初にいくつかの間違ったnatidsが含まれていることを前提としていて、間違ったnatidsがtbl_nationalityで見つかった説明に対応しています。

私のコードは最初の「間違った」tbl_demographicsをループし、tbl_nationalityの対応する記述を検索し、そこからnatidを読み込み、tbl_demographicsの対応するエントリを更新します。

関連する問題