Hallo,
nach 5 Jahre regelmässiger PHP Programmierung mit einer anschliessender Pause von 4 Jahren Pause, versuch ich mich gerade wieder in die Materie einzuarbeiten.
Ich habe eine *.csv Datei, und eine MySql Tabelle , ich möchte die Datensätze der CSV Datei in die Tabelle importieren, vorher aber eine Dublettensuche starten um aus der CSV Datei ggf. Daten zu entfernen die womöglich schon in der MySql Tabelle vorhanden sind.
Mit der levenshtein Funktion ermittle ich eine Dubletten Wahrscheinlichkeit in %.
Ich nehme einen Datensatz aus der CSV Tabelle und vergleiche ihn mit jedem Eintrag in der MySql Tabelle und
prüfe derzeit wie folgt:
PHP-Code:
if (_vergleich(FeldA_csv,FeldA_mysql) >80) { //Wenn Abweichung größer als 80% dann
if (_vergleich(FeldB_csv,FeldB_mysql) >80) {
if (_vergleich(FeldC_csv,FeldC_mysql) >80) {
if (_vergleich(FeldD_csv,FeldD_mysql) >80) {
echo "Der CSV Datensatz ist zu ".$summe_alle_vergleiche/4 ." % eine Doublette verglichen mit dem Datenbank Eintrag.";
}
}
}
}
Die Problematik ist klar, das funktioniert halt solange wie alles schön der Reihe nach abgearbeitet wird
Was aber wenn Feld A unter 80% faellt und B,C,D > 80% , dann würde hier keine Dublette erkannt.
Bevor ich da jetzt für jeden Fall eine Schleife erstelle wollte ich mal fragen wie man das elegant lösen könnte.
Vielen Dank schonmal.
EDIT:
Habe nun folgendes probiert:
PHP-Code:
$row = 1; // Anzahl der Arrays
$handle = fopen ("datei.csv","r"); // CSV Datei zum Lesen �ffnen
while ( ($data = fgetcsv ($handle, 1000, ";")) !== FALSE ) { // Daten werden aus der Datei in ein Array $data gelesen
$num = count ($data); // Anzahl Felder im Array $data werden gez�hlt
$row++; // Anzahl der Arrays wird inkrementiert
$newData = array($data);
$arr_company = check_FeldA($newData);
$arr_street = check_FeldB($newData);
$arr_zip = check_FeldC($newData);
$arr_city = check_FeldD($newData);
$result = array($arr_company,$arr_street,$arr_zip,$arr_city);
print_r($result);
fclose ($handle);
}
Die Funktionen zum checken der Felder sehen so aus:
PHP-Code:
function check_FeldA($csvdata) {
$sql = new mySQL(datenbank); // Verbindung zur Datenbank aufbauen.
$daten = $sql->select("SELECT FeldA FROM Tabelle"); // Datenbank Abfrage
for ($i = 0; $i < count($daten); $i++) { // Für jeden Datensatz in der Tabelle folgendes machen
if (_vergleich($csvdata[0][0], utf8_decode($daten[$i]->FeldA)) > 80 ) {
return $csvdata[0];
}
}
}
Was ich mir dabei gedacht habe .... die CSV Zeile geht als Array in die Funktion reingeht, dort vergleiche ich mit dem Datenbank Feld, und möchte alle in frage kommenden Datensaetze als Array wieder rausgeben, das gleiche mit den anderen Feldern, so das ich am Ende ein Array habe wo alle in Frage kommenden Datensaetze drin stehen sollten, wie ich den auseinander nehme weiß ich noch nicht.
Danke
EDIT2:
Zitat:
|
wie ich den auseinander nehme weiß ich noch nicht
|
so vielleicht:
PHP-Code:
foreach ($result as $treffer)
if ($treffer != '')
echo print_r($treffer)."<hr>";
Meine Dummies werden bisher identifiziert.....
Was meint Ihr zu dem ganzen ?
Danke