2012-03-29 26 views
0

Ich habe zwei Tabellen eine tbl_demographics mit coluimns [staffid, nativ] und eine andere tbl_nationality mit Spalten [nativ, Beschreibung].Update-Tabelle mit Daten aus einer anderen Tabelle

HR sendet mir Mitarbeiterdaten in Excel mit dem Personalidentität und Nationalität, die ich hochladen, wie es ist. Einziges Problem ist, dass die Nationalitätenspalte Daten wie Canadian statt (CAN) oder Nigerian statt (NGA) enthält.

Wie schreibe ich ein Skript in sql (oder php gerade), die alle nativ in tbl_demographics in Daten aktualisieren kann, die die richtige nativ in tbl_nationality entspricht? Ich benutze mysql Server (und PHP falls notwendig).

Die Daten, die sie senden:

staffid | natid 

201001 | Canadian 

202332 | Nigerian 

Erwartete Tabellen aussehen:

staffid | natid (tbl_demographics) 

201001 | CAN 
202332 | NGA 


natid | description (tbl_nationality) 

CAN  | Canada 
NGA  | Nigeria 
+1

Sie müssen auch "Canadian" anstelle von "Canada" usw. in tbl_nationality oder eine konsistente Beziehung zwischen ihnen haben. – Stefan

Antwort

0

verwenden, vorausgesetzt, Sie sind die HR-Excel-Daten in einer Tabelle Ort namens tbl_excel (nur 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 

Dies braucht natürlich die Beschreibungen der Daten, die sie (Canada, Canadian) entsprechen den Beschreibungen senden auf der tbl_nationality Tabelle.

0

Erstellen Sie eine Karte, wo Schlüssel vollständige Name des Landes ist und Wert ist abreviation. für Land-Feld, wenn Schlüssel in der Karte ist der Wert als Land verwenden sonst den Schlüssel/Eintrag von hr einfach

0

verwenden:

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

die die Variablen auswählen sollten dann die falsch sind und sie korrigieren.

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: Dies setzt voraus, dass einige falsche tbl_demographics zunächst natids enthält, und daß die falsche natids Beschreibungen in tbl_nationality gefunden entsprechen.

Mein Code durchläuft die anfängliche 'falsche' tbl_demographics, sucht die entsprechende Beschreibung in tbl_nationality, liest das nativ von dort und aktualisiert den entsprechenden Eintrag in tbl_demographics.

Verwandte Themen