ERLEDIGT
JA
JA
ANTWORTEN
5
5
ZUGRIFFE
4590
4590
EMPFEHLEN
-
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!
-
Ich hätte da folgenden Vorschlag:
Vielleicht läßt sich das sogar mit einen einzigen SQL-Statement erschlagen, aber so fit bin ich dann darin doch nichtCode 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\""; // ... }

Gruß
MCoder"The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
--- Larry Wall
-
12.07.06 11:36 #3
- 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: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.Code sql:1
UPDATE tab1,tab2 SET tab2.name = tab1.name WHERE tab1.ip = tab2.ip;
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
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"
----
-
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!
-
Danke Jungs!
Ich habs geschafft! Funktioniert! Danke nochmal!
Ähnliche Themen
-
SQL Vergleich zweier Tabellen
Von LordDarkness im Forum Relationale DatenbanksystemeAntworten: 6Letzter Beitrag: 11.07.10, 12:39 -
Vergleich zweier Dateien
Von RaketenPeter im Forum JavaAntworten: 10Letzter Beitrag: 16.05.08, 16:22 -
Vergleich zweier Quellen
Von M-GT im Forum PHPAntworten: 4Letzter Beitrag: 10.04.06, 16:12 -
Vergleich zweier mysql Tabellen
Von ehonk im Forum PHPAntworten: 2Letzter Beitrag: 09.01.04, 10:12 -
Vergleich zweier Strings
Von Basileus im Forum PHPAntworten: 4Letzter Beitrag: 12.10.03, 09:55





Zitieren
Login






