MySQL- Inhalt benachbarter Felder ansprechen
-
Nach längerem Kopfzerbrechen frag ich Euch mal:
Es wird eine SQL Anfrage gestellt, welche wie folgt aussieht:
SELECT name, adresse FROM users WHERE ort = 'Essen';
nun will ich diese infos in eine Struktur verspeichern, die einen string name und einen string Adresse aufnehmen kann:
Das Problem ist, dass ich es irgendwie nihct raffe, wie ich innerhalb der zu verarbeitenden Reihe an die Daten des Benachbarten Feldes (adresse) gelange
while ((row = mysql_fetch_row(res))) { for (i = 0; i<fields; i++) users.name= row[i]; //hier soll jetzt in etwa users.address= ???(frage ich ja gerade) kommen }
in users.name steht auch lediglich der Name drin, auch wenn da row steht, wird das nebenstehende Feld bnihct aufgenommen (sonst würde ich das ja den string einfach "zerhacken" können und dann später in users.name bzw. users.address speichern...also nun die Frage: "Wie komme ich an die Daten des benachbarten Feldes?"
-
...es wird immer myseriöser:
while ((row = mysql_fetch_row(res))) { for (i = 0; i<fields; i++) { cout << row[i] << endl; cout << i << endl; if(i==0) { users.name= row[i]; } else { cout << "Fall else!" << endl; users.address= row[i]; } docres.result.push_back(users);} }
Ich habe ein wenig herumprobiert und festgestellt, dass scheinbar für jeden Datensatz in einem Feld eine neue Reihe angelegt wird, da es sich um Testdaten handelt, können nur zwei Datensätze ausgegeben werden, zuerst name, dann adresse. Also wollte ich das mit dieser If Schleife prüfen, in welcher Reihe er ist und dann die Verspeicherung dementsprechend zuordnen. Das Ergbenis überrascht mich allerdings sehr:
Hannes 0 Emilienstr 1 Fall else! (die folgende Ausgabe wird an einem anderen Teil des Programms gemacht): Name: Hannes Adresse: Name: Hannes Adresse:
Meiner Vorstellung von Logik entsprechend bekommt users.name beim ersten Durchlauf (i==0) "Hannes", also den ersten zurückgelieferten Eintrag übergeben. Die Schleife wird erneut durchlaufen, diesmal steht "Emilienstr" an row[i], richtigerweise ist i nun auch nicht mehr 0 und die else Anweisung sollte bearbeitet werden- der entspr. Text wird ja auch ausgegeben. Trotzdem wird an users.address scheinbar nichts übergeben, aber users.name bekommt wieder etwas zugewiesen (der Datensatz wird ja doppelt ausgegebn).
Was geht da vor?
-
Dein Fecth-Code ist richtig. Mach mal eine Debug.
-
Habe den Fehler gefunden- ich hatte eine schliessende klammer vergessen, dadurch kam es zu dem merkwürdigen Verhalten den FOR schleife.