SQL: Verarbeiten mehrere Rows in PHP?

FrazeColder

Lt. Commander
Registriert
Okt. 2013
Beiträge
1.718
Moin zusammen,

nachdem ich meine Datenbank nun so umgebaut habe, dass ich für jedes Feld nur ein Feld habe und alles soweit funktioniert, stehe ich leider vor einem neuen Problem.

Ich möchte nun die Daten aus der Datenbank verarbeiten. Dafür würde ich gerne zeilenweise durch den Datensatz iterieren, den ich zurückbekomme. Ich bekomme beispielsweiße so etwas hier zurück:

Bildschirmfoto 2017-02-11 um 13.21.51.png

Dabei ist ganz wichtig, dass die Daten nicht durcheinander gewürfelt werden dürfen!
Jedes Feld in einer Zeile gehört zusammen. Beispiel:
Price: 5, Price_Old: 10, Link: http://5-10.de & Shop: 7952 müssen auch so in PHP zusammengefügt werden!

Meine Fragen jetzt sind, erstens, was bekomme ich da genau zurück?
Wäre meine Rückgabe dann ein zweidimensionales Array?

Und zweitens, wie kann ich das realisieren?

MfG und Vielen Dank!
 
Was hast du überhaupt schon dafür gesucht? Es gibt tausende PHP-MySQL Tutorials, wahrscheinlich mindestens 100 für den Umgang mit der PDO.
 
Ich habe nach sowas wie "sql returned value" gesucht. Leider aber nichts gefunden.

Wenn ich wüsste, ob ich z.B. ein zwei dimensionales Array zurückbekomme, ist das ja kein Thema.
 
Alles klar, Danke euch Vielmals!
Ergänzung ()

So, ich habe nun alles erfolgreich hinbekommen und das Programm läuft auch so wie es soll. Nun möchte ich aber noch mögliche Fehlerquellen ausschließen. Das jemand z.B. zweimal den selben Shop importiert usw.

Dafür fehlt mir aber gerade ein wenig das Know How. Ich habe schon gegoogelt, allerdings nichts verständliches gefunden... :/
Mein Problem ist, dass ich gerne alle Rows löschen möchte, welche Doppelt vorkommen. Das sehe zum Beispiel so aus:
Bildschirmfoto 2017-02-11 um 14.58.25.png

Die Zeilen sollen aber nur dann gelöscht werden, wenn alle Felder mit denen der anderen Zeilen übereinstimmen. Also nur, wenn pid, price, pirce_old, link und shop die selben Werte haben. Und eine Zeile soll dann natürlich übrig bleiben.

Wie kann ich das realisieren?

Ich habe mir schon überlegt aus allen Werten einer Row eine ID erstellen zu lassen. Weil wenn dann Spalten gleich sind, ist die ID auch gleich und somit muss ich nur ein Wert mit den anderen Row IDs überprüfen. Das wäre evtl. einfacher.
Aber wie kann ich das realisieren? - Bei Google komme ich leider nur auf sowas wie Auto_Increment, wäre aber ja falsch...

MfG und Vielen Dank!
 
Sind das alle Spalten der Tabelle? So kannst du meines Wissens nachträglich nichts mehr machen ohne eine weitere (temporäre) Tabelle anzulegen.
Du solltest eher von vornherein vermeiden, dass so etwas passiert. Also vor einem Insert per Select auf existierende Daten prüfen.
 
Und müllst die DB weiterhin mit doppelten Datensätzen zu?
 
Temporär, ja. Ich lösche alle Einträge der Tabelle eh bevor ich meinen Cronjob ausführe. Dabei ist das Problem aber gelöst, sobald ich ne Antwort vom AFC Support habe. Aber ich würde das so oder so über Distinict lösen, da das nochmal garantiert, dass ich keine doppelten Einträge habe.

Aber die Tabelle ist in dem Sinne, bzw. beim nächsten Import eh "selbstreinigend", da alle Distinict Werte in einer neuen Tabelle sind und diese Tabelle die Grundlage für den nächsten Cronjob bildet.
 
FrazeColder schrieb:
Aber ich würde das so oder so über Distinict lösen, da das nochmal garantiert, dass ich keine doppelten Einträge habe.
Alternativ könntest Du auch einen unique key auf die Tabelle legen. Damit verhindert man, dass doppelte Einträge überhaupt in die Tabelle geschrieben werden können.
 
Zurück
Oben