PHP mysql Sortierungsfrage
Steffen
- php
Hi,
mein Problem:
In einer foreach-schleife mache ich erst ein update-query und dann kopiere ich den geupdateten Datensatz. Dies beiden Datensäte ghören spaer usammen
Später werden die Datensätze nach Datum ausgegben.
Wenn nun durch das updae-statement mehrere Datensätze etroffe sind, werden sie auch durch die anschließende Kopieraktion gleichermaßen betroffen sein.
Das Problem hierbei ist aber, dass bei zeitlch identischen Datensätzen (die sind leider nur nach Tag unterschieden) di Reihfolge durcheinander kmt.
Denn es wird ja nicht
update --> kopieren --> upate--> kopieren
sondern
update-->update--->kopieren-->kopieren
vorgenmmen.
3 Lösungen fallen mir spontan ein:
Alle 3 Lösungen gefallen mir nicht.
2 Fragen:
Habe ich mein Problem hinreichend beschrieben?
Kennt Ihr weitere Lösungen?
VG, Steffen
Habe ich mein Problem hinreichend beschrieben?
Negativ ;-)
Das Problem hierbei ist aber, dass bei zeitlch identischen Datensätzen (die sind leider nur nach Tag unterschieden) di Reihfolge durcheinander kmt.
Warum stört das? Auf was kommt es dir hier genau an?
Das Problem hierbei ist aber, dass bei zeitlch identischen Datensätzen (die sind leider nur nach Tag unterschieden) di Reihfolge durcheinander kmt.
Warum stört das? Auf was kommt es dir hier genau an?
Die zu updatenden und danach zu kopierenden Datensätze gehören thematisch in der späteren Ausgabe zusammen. Deshalb wäre es für den Betrachter schöner, sie stünden auch untereinander.
Deshalb wäre es für den Betrachter schöner, sie stünden auch untereinander.
Der Betrachter soll ja nicht in deine Datenbank schauen dürfen. Es hindert dich niemand daran, den Datensätzen eine wirklich eindeutige und nicht "irgendjemand" überlassene (in dem Fall dem Identitymechanismus) zu geben.
Würd ich dringend tun.
Hi!
Das Problem hierbei ist aber, dass bei zeitlch identischen Datensätzen (die sind leider nur nach Tag unterschieden) di Reihfolge durcheinander kmt.
Grundsätzlich ist definiert (vielleicht nicht schwarz auf weiß, so doch durch die Macht des Faktischen), dass die Datensätze in einem DBMS in keiner konkreten Reihenfolge vorliegen. Alle Abfragen sind demnach als unsortiert zu betrachten, solange kein Sortierkriterium angegeben wurde. Brauchst du also eine bestimmte Reihenfolge, verwende ein Sortierkriterium. Muss die Reihenfolge eindeutig sei, verwende ein eindeutiges (unique) Sortierkriterium. Übrigens kennt auch UPDATE die ORDER-BY-Klausel.
Lo!
Sortierkriterium. Übrigens kennt auch UPDATE die ORDER-BY-Klausel.
Ist mir durchaus bekannt. Zumindest kennt Update sie, solange nicht über mehrere Tabellen hinweg gesucht wird.
Nur ist es egal, ob beim "select" oder beim "update" die Datensätze kein eindeutiges Sortierkriterium haben.
Das hätten sie zwar (z.B. ID), nur darauf kommt es ja gar nicht an.
Beispiel:
Es sollen 3 betroffene Datensätze mit update und hiernach mit copy (so es das denn gäbe) behandelt werden.
Dann läuft das bislang so ab, dass erst alle 3 upgedatet und dann alle 3 kopiert werden.
Somit wird mein für den späteren select wertvolles Sortierkriterium (ID) falsch angelegt. Kann ich immer dann verschmerzen, solange zwishen den 3 betroffenen Datensätzen 1 Tag Unterschied ist, weil ja dann später mein Sortierkriterium Nr. 1, nämlich das Datum greift.
Steffen
Hallo,
Somit wird mein für den späteren select wertvolles Sortierkriterium (ID) falsch angelegt.
eine ID halte ich persönlich nicht für ein wertvolles Sortierkriterium. Sie dient dazu, einen Datensatz zu _id_entifizieren. Ich halte es für keine besonders gute Idee, dieser Spalte noch mehr aufzubürden.
Wie wär's mit einem UPDATE-Trigger?
Freundliche Grüße
Vinzenz
Hi,
In einer foreach-schleife mache ich erst ein update-query und dann kopiere ich den geupdateten Datensatz.
In/auf was kopierst du?
Dies beiden Datensäte ghören spaer usammen
Wozu brauchst du von einem Datensatz ein Original und eine Kopie?
MfG ChrisB
In/auf was kopierst du?
In dieselbe Tabelle.
Wozu brauchst du von einem Datensatz ein Original und eine Kopie?
Berechtigte Frage. Ich muss zugeben, ich habe mich da falsch ausgedrückt. Es ist keine 1:1-Kopie. Es wird eine Spalte beim Kopieren verändert.
Im Grunde geht es bei dem ganzen Vorgang um nichts anderes, als 1 Datensatz zu splitten. Deshalb die beiden Vorgänge:
mfg, Steffen
Hi,
Es ist keine 1:1-Kopie. Es wird eine Spalte beim Kopieren verändert.
Im Grunde geht es bei dem ganzen Vorgang um nichts anderes, als 1 Datensatz zu splitten.
Und wozu ist das wiederum erforderlich?
MfG ChrisB