tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
4590
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Buba235 Buba235 ist offline Mitglied Brokat
    Registriert seit
    Apr 2006
    Beiträge
    278
    Hallo!

    Ich möchte den Inhalt von 2 Tabellen vergleichen. Um genau zu sein zwei Spalten in 2 verschiedenen Tabellen. Die eine Tabelle enthält nur 23 ver. Namen und eben auch 23 ver. IP-Adressen. In der zweiten Tabelle bei einer bestimmten Spalte befinden sich nur IP-Adressen, die auch mehrfach aber nicht geordnet vorkommen können. Jetzt möchte ich den Inhalt der Spalte der zweiten Tabelle mit dem Inhalt der ersten Tabelle vergleichen. Immer wenn eine IP-Adresse übereinstimmt, soll in die zweite Tabelle der Name zu der zugehörigen IP-Adresse eingetragen werden. Also mal ein Beispiel:
    Erste Tabelle:
    IP-----------------Name
    123.456.789------Hans
    234.567.890------Bert
    345.678.901------Ernie

    Zweite Tabelle:
    IP-----------------Name
    123.456.789------(leer) (<- Hier sollte jetzt Hans eingetragen werden)
    100.001.000------(leer) (<- Hier ein anderer Name)
    123.456.789------(leer) (<- Hier wieder Hans)
    234.567.890------(leer) (<- Hier sollte Bert eingetragen werden)

    Wie mach ich das denn jetzt? Ich hab mir die erste Tabelle mal in eine CSV-Datei geschrieben und mir nur die IP-Adressen ausgeben lassen. Funktioniert auch! Das hab ich so gemacht:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    while(fgets(buffer, LINE_SIZE, datei) != NULL) {
                    word = mystrtok(buffer, gelesene_Kommas);
                    for(i = 0; word != NULL; i++) {
                            if (i == 1) {
                                    printf("%s \n", word);
                                    break;
                            }
                            word = mystrtok(NULL, gelesene_Kommas);
                    }
            }

    Aber wie kann ich das jetzt vergleichen? Und wie kann ich bei Übereinstimmung dann auch noch den dazugehörigen Namen in die zweite Tabelle eintragen? Könnt ihr mir da helfen? Ich hoffe mal es ist nicht zu verwirrend!
     

  2. #2
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Ich hätte da folgenden Vorschlag:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    // Mit einem SQL-Befehl die Datensätze aus Tabelle1 herausholen,
    // deren IPs in Tabelle2 vorhanden sind
    char sql_find[] = "SELECT IP,Name FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.IP = Tabelle2.IP";
    // ...
     
    // Eine Schleife über alle Ergebnisdatensätze laufen lassen
    // und Tabelle2 aktualisieren
    for( ... )
    {
        char sql_update[] = "UPDATE Tabelle2 SET Name = \"Name_aus_aktuellem Ergebnisdatensatz\" WHERE IP = \"IP_aus_aus_aktuellem Ergebnisdatensatz\"";
        // ...
    }
    Vielleicht läßt sich das sogar mit einen einzigen SQL-Statement erschlagen, aber so fit bin ich dann darin doch nicht

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  3. #3
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Wozu willst du denn die ganzen Daten doppelt und dreifach speichern? Du kannst doch bei einer Anfrage die entsprechende Spalte mit in das Resultat übernehmen. Oder du könntest eine VIEW erstellen (ab MySQL 5.0), das ist im Prinzip sowas wie eine Tabelle, nur das die Daten direkt aus anderen Tabellen stammen und keine Daten dupliziert werden.

    Wenn du's trotzdem machen willst, kannst du das mit der SQL Anweisung:
    Code sql:
    1
    
    UPDATE tab1,tab2 SET tab2.name = tab1.name WHERE tab1.ip = tab2.ip;
    Allerdings funktioniert das erstmal nur in MySQL - wenn du später auf eine andere Datenbank schwenken willst oder generell SQL 92 konform arbeiten willst solltest du es anders machen.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  4. #4
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Alternativ dazu und evtl etwas mehr dem Standard entsprechend sollte auch das gehen:

    Code sql:
    1
    
    UPDATE tabelle2 SET Name = (SELECT Name FROM tabelle1 WHERE tabelle2.IP = IP);

    Gruß,

    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

  5. #5
    Buba235 Buba235 ist offline Mitglied Brokat
    Registriert seit
    Apr 2006
    Beiträge
    278
    Hallo!

    Meintest du das so:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
          sql_find = "SELECT IP,NAME FROM ip_data \
    INNER JOIN test ON ip_data.IP = test.SRC_IP";
     
            /*Ergebnis verarbeiten*/
            result = mysql_store_result(conn);
            if(result == NULL) {
                    if(mysql_error(conn)) {
                            fprintf(stderr, "%s\n", mysql_error(conn));
                    } else {
                            fprintf(stderr, "%s\n", "unknown error\n");
                    }
            }
     
            /*Schleife ueber alle Datensaetze*/
            while((row = mysql_fetch_row(result)) != NULL) {
                    for(i = 0; i < mysql_num_fields(result); i++) {
                            if(row[i] == NULL) {
                                    /*printf("[NULL]\t");*/
                            } else {
                                    if (i == (mysql_num_fields(result) - 1)) {
                                            sql_update = "UPDATE test SET \
    NAME = row WHERE IP = row";
                                    }
                            }
                    }
            }

    Also so in der Art meine ich. Weil so gehts nicht! Zumindest nimmt er die SQL-Befehle so nicht an!
     

  6. #6
    Buba235 Buba235 ist offline Mitglied Brokat
    Registriert seit
    Apr 2006
    Beiträge
    278
    Danke Jungs!

    Ich habs geschafft! Funktioniert! Danke nochmal!
     

Ähnliche Themen

  1. SQL Vergleich zweier Tabellen
    Von LordDarkness im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 11.07.10, 12:39
  2. Vergleich zweier Dateien
    Von RaketenPeter im Forum Java
    Antworten: 10
    Letzter Beitrag: 16.05.08, 16:22
  3. Vergleich zweier Quellen
    Von M-GT im Forum PHP
    Antworten: 4
    Letzter Beitrag: 10.04.06, 16:12
  4. Vergleich zweier mysql Tabellen
    Von ehonk im Forum PHP
    Antworten: 2
    Letzter Beitrag: 09.01.04, 10:12
  5. Vergleich zweier Strings
    Von Basileus im Forum PHP
    Antworten: 4
    Letzter Beitrag: 12.10.03, 09:55