Frage zu SQL-Befehl

Das mit dem WHERE ist mir klar. Ich weiß auch was du meinst, nur gibt es in der DB nichts wonach ich mich da richten könnte. Soll heißen es gibt keine Reihenfolge auf die ich mich mit einem WHERE festlegen könnte. Ich muss die Daten aus einer CSV Datei holen und da ist nichts in so einer Ordnung wie 1, 2, 3, 4, 5, ... usw. - Leider!
Das was mir eben Probleme bereitet ist einzig und allein der SQL-Befehl. Weil ich bei dem Befehl eine Variable benutzen muss, geht bei mir alles drunter und drüber. Ich kann aber keinen Befehl benutzen, der so aussieht: UPDATE test SET SUB_TYPE = 'B' WHERE SRC_NAME = 'A'
In dieser CSV Datei stehen (zumindest das was ich im Moment auslesen möchte) solche Sachen wie Reject, Response, Accept! Und das in einer zufälligen Reihenfolge. Es passt zu nichts was sonst in der Datenbank steht.
 
Anders gefragt: Gibt es eine andere Möglichkeit die Wörter in die DB einzutragen? Es sind bereits Daten vorhanden, also muss es ja mit UPDATE gehen, aber kann ich trotzdem irgendwie meine Wörter, die sich ja in jeder Zeile ändern, der Reieh nach in die DB eintragen?
 
Buba235 hat gesagt.:
Hallo!

Also ich habe die mysql_query() mal überprüft und sie ist nicht erfolgreich!
Das heißt welchen Fehler hat die Funktion den zurückgegeben?
http://dev.mysql.com/doc/refman/4.0/de/mysql-query.html hat gesagt.:
*

CR_COMMANDS_OUT_OF_SYNC

Befehle wurden nicht in der korrekten Reihenfolge ausgeführt.
*

CR_SERVER_GONE_ERROR

Der MySQL-Server ist weg.
*

CR_SERVER_LOST

Die Verbindung zum Server ging während der Anfrage verloren.
*

CR_UNKNOWN_ERROR

Ein unbekannter Fehler trat auf.
Dann haben die Daten einer Tabelle keine bestimmte Reihenfolge. Du kannst nicht davon ausgehen, das die Daten in der Reihenfolge in der Datenbank gespeichert sind wie du sie eingefügt hast.

Um den Daten eine bestimmte Reihenfolge zu verpassen mußt du jedem Record eine Nummer zuordnen - in deinem Fall also die Zeilennummer. Die mußt du als Spalte einfach mit in die Tabelle schreiben.

Gruß
 
Hm, das Problem ist, dass ich die DB-Struktur nicht verändern darf. Ich kann also keine zusätzlichen Spalten einfügen. Wenn ich den Code so ausführe:

Code:
while(fgets(buffer, LINE_SIZE, datei) != NULL) {
	word = mystrtok(buffer, gelesene_Kommas);
        for(i = 0; word != NULL; i++) {
        	if (i == 0) {
                	sprintf(sqlSub_Type, "UPDATE test SET SUB_TYPE = '%s'", word));
                        fprintf(stderr, "%s\n", word);
                        mysql_query(conn, sqlSub_Type);
                        break;
                }
                word = mystrtok(NULL, gelesene_Kommas);
        }
}

Dann gibt er mir auf der Konsole ja die richtigen Wörter aus. Wieso aber wird immer nur das letzte Wort in die Tabelle geschrieben? Warum wird da nicht nacheinander immer das aktuell eingelesene Wort eingetragen? Ich muss ganz ehrlich sagen, dass ich das nicht begreife. Ich versteh auch nicht was genau ich ändern könnte, um das zu verhindern.
 
Ohne Einschränkung (WHERE) wirkt UPDATE auf die gesamte Tabelle, d.h. wenn die Tabelle 20 Zeilen hat, werden auch alle 20 Zeilen gleichzeitig modifiziert. Daher steht immer das letzte Wort drin.

Die Tabelle besteht doch bestimmt nicht nur aus der einen Spalte? Vielleicht gibt es ein Index-Feld o.ä., mit der einzelne Records identifiziert werden können. Schaue dir noch mal die Struktur der Tabelle an.

Gruß
MCoder
 
Buba235 hat gesagt.:
Dann gibt er mir auf der Konsole ja die richtigen Wörter aus. Wieso aber wird immer nur das letzte Wort in die Tabelle geschrieben? Warum wird da nicht nacheinander immer das aktuell eingelesene Wort eingetragen? Ich muss ganz ehrlich sagen, dass ich das nicht begreife. Ich versteh auch nicht was genau ich ändern könnte, um das zu verhindern.
Es werden ja alle Wörter nacheinander in die Spalte geschreiben, aber in ALLE Zeilen. Du mußt irgendwie eine Zeile auswählen auf die das Update Kommando wirken soll. Wählst du keine Zeile mit WHERE aus, sind alle Zeilen betroffen. Deswegen steht immer überall der letzte Wert den du reingeschreiben hast drin, weil die vorigen Werte überschrieben werden.

Wenn du das Layout der Tabelle nicht verändern kannst/darfst bist du aufgeschmissen. Du kannst ja dann keine Zuordnung von Zeilen der Datei zu den Records in der Datenbank machen. Wie willst du da irgendwas aktualisieren?

Gruß
 

Neue Beiträge

Zurück