[MySQL+PHP] Komplexe Abfrage oder Brett vor dem Kopf?

Tim C.

Erfahrenes Mitglied
Hallo,
ich sitze an einem Problem und wüsste gerne, ob ich es einfacher/kürzer lösen kann, als über einen ganzen Stapel von Abfragen.

Zur Situation. Ich habe eine Tabelle in einer MySQL Datenbank in der werden Werte gespeichert. Unter anderem Daten. Die Daten stehen in Spalten des Typs datetime und haben das Format 0000-00-00 00:00:00.

Dabei habe ich eine Spalte, ich nennen sie mal "start" in der steht das Datum an dem der Datensatz angelegt wurden und dann habe ich noch "zwischend_1" bis "zwischend_x". Im Moment nur bis _10 aber prinzipiell sollte die Lösung variabel anpassbar sein.

Jetzt möchte ich irgendwie die Differenz in Tagen zwischen dem heutigen Tag und dem aktuellsten Datum, von dem ich natürlich nicht von vorne herein weiss, welches das ist, bzw. welche der zwischend_ Werte überhaupt gesetzt ist.

Hat einer einen Ansatz? Der würde mir evt. schon helfen, ich wandel nämlich grade ein bischen im Dunkeln ;).
 
Du könntest dir das ganze etwas einfacher machen indem du dir zu jedem Datensatz ein Zahl merkst, nämlich die des letzten Tags/Spalte - also zB. 10. Das erlaubt dir deine Inserts, Updates und Select Statements vielleicht einfacher zu formulieren.
 
Original geschrieben von fluessig
Du könntest dir das ganze etwas einfacher machen indem du dir zu jedem Datensatz ein Zahl merkst, nämlich die des letzten Tags/Spalte - also zB. 10. Das erlaubt dir deine Inserts, Updates und Select Statements vielleicht einfacher zu formulieren.
10 ist momentan die letzte Spalte die in der DB existiert, aber es ist nicht bei jedem Datensatz immer _1 bis _10 gefüllt. Mal ist es _1 bis _3 mal _1 bis _10 mal gar nichts, dann muss nämlich das von Start genommen werden. Das ist ja das Problem :(

Wenn du meinst ich soll mir zu jedem Datensatz merken, welches das aktuelleste Datum ist, genau dafür suche ich nach einer Lösung, wie ich das adequat rausbekomme ohne den Server mit DB-Querries en masse zu fluten.
 
Kannst du am Datenbankdesign nichts ändern?
Ich denke mit einer weiteren Spalte in der du dir nur dein X merkst (wenn keine Daten existieren kannst du es ja defaultmäßig mit -1 belegen).

Ich nehme mal an, dass es keine Lücken geben kann sondern immer Daten von 1 bis X vorhanden sind. In einer Extraspalte zu jedem Datensatz merkst du dir X (ich nenne sie jetzt aktd), und mußt so nicht erfragen wie viele Spalten dein Datensatz denn nun hat.

Weiterhin nehme ich an, dass in der letzten Spalte - also "zwischend_X" immer das aktuelleste Datum abgelegt ist.

In einer einzigen Abfrage lässt sich die Differenz nach meiner Idee zwar nicht errechnen, aber mit zweien. Zuerst ließt du X aus und dann kannst du die neue Abfrage für die Differenz formulieren.
 
Original geschrieben von fluessig
Kannst du am Datenbankdesign nichts ändern?
Ich denke mit einer weiteren Spalte in der du dir nur dein X merkst (wenn keine Daten existieren kannst du es ja defaultmäßig mit -1 belegen).

Ich nehme mal an, dass es keine Lücken geben kann sondern immer Daten von 1 bis X vorhanden sind. In einer Extraspalte zu jedem Datensatz merkst du dir X (ich nenne sie jetzt aktd), und mußt so nicht erfragen wie viele Spalten dein Datensatz denn nun hat.

Weiterhin nehme ich an, dass in der letzten Spalte - also "zwischend_X" immer das aktuelleste Datum abgelegt ist.

In einer einzigen Abfrage lässt sich die Differenz nach meiner Idee zwar nicht errechnen, aber mit zweien. Zuerst ließt du X aus und dann kannst du die neue Abfrage für die Differenz formulieren.
Nein am Datenbanklayout kann ich nichts ändern, aber ich denke ich werde nun folgendes machen, da jeweils zwischen zwei Daten immer ~6 Monaten liegen.
Ich werde die Differenz zwischen dem start Datum und Heute ermitteln und darauf bestimmen, welche zwischend_ Werte gesetzt sein müssten. Diese, die gesetzt sein müssten, kann ich dann abfragen und so überprüfen, ob diese noch ausstehen oder nicht.

Trotzdem danke für die Hilfe, manchmal kommt man nur wenn man mal mit ein paar Leuten spricht, auf "ganz neue" Ideen. :)
 
Dein relationales Datenbankmodell ist ja nun nicht ganz in der dritten Normalform. Eigentlich müsstest Du die zwischend_x-Felder in einer extra Tabelle unterbringen und mit der Quell-Tabelle verknüpfen:

Tabelle: ZWISCHEND
------------------------------
QUELL_ID
DATUM_ZWISCHEND

Somit kannst Du so viele "zwischend" je Quell-Datensatz anlegen, wie nötig und für die Ermittlung des aktuellsten Datensatzes stehen Dir einfachste SQL-Mittel zur Verfügung.

mfg, snuu
 
Zuletzt bearbeitet:
Zurück