Einzelnen Beitrag anzeigen
Alt 26.09.2008, 14:13  
elTorito
Neuer Benutzer
 
Registriert seit: 26.09.2008
Beiträge: 3
elTorito befindet sich auf einem aufstrebenden Ast
elTorito eine Nachricht über ICQ schicken
Standard Dublettensuche

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/." % 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 ($handle1000";")) !== 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

Geändert von elTorito (26.09.2008 um 16:04 Uhr).
elTorito ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten