Datumslücken füllen

Datumslücken füllen

am 28.09.2006 22:54:06 von heiner eiberger

Hallo!

Vielleicht kann mir jemand bei meinem Problem helfen:
Ich habe eine MySQL-Datenbank mit Messdaten-Einträgen, die zeitlich weit
auseinander liegen.
Für eine Auswertung in einem Diagramm suche ich eine Möglichkeit, mit
PHP ein Array zu erzeugen und darin die Datumsfelder künstlich zwischen
Start- und Ende-Datum der Eintragungen zu füllen.
Wo echte Einträge vorhanden sind, würde ich die Messdaten dann beim
passenden Datum einlesen.

Weiß jemand Rat?

heiner

Re: Datumslücken füllen

am 28.09.2006 23:15:22 von Claus Reibenstein

heiner eiberger schrieb:

> Für eine Auswertung in einem Diagramm suche ich eine Möglichkeit, mit
> PHP ein Array zu erzeugen und darin die Datumsfelder künstlich zwischen
> Start- und Ende-Datum der Eintragungen zu füllen.

Was meinst Du mit "künstlich füllen"? Zwischenwerte berechnen und
eintragen? Also interpolieren? Nach welcher Methode?

Ein Array erzeugt man mit array(). Einen Eintrag nimmt man mit
array[]=... (anhängen) oder array[$index]=... (einfügen oder
überschreiben) vor (für ... die der Methode entsprechenden Formel
einsetzen). Aber das weißt Du ja sicher.

Wo liegt jetzt Dein Problem?

Gruß. Claus

Re: Datumslücken füllen

am 29.09.2006 00:42:22 von heiner eiberger

Das Problem habe ich damit, dass ich das Datumsfeld im Array automatisch
füllen will. Wenn die Daten im Diagramm ausgegeben werden, fehlen auf
der X-Achse die Datenpunkte der Tage, an denen keine Messungen
erfolgten. Ich habe mir vorgestellt, dass ich durch eine Schleife vom
ersten Eintragungstag bis zum letzten das Datum durch PHP erzeuge und in
das erste Feld des Arrays schreibe. Gibt es da eine passende Funktion,
die z. B. vom 3. Juli 2005 bis 10. Oktober 2006 automatisch jedes Datum
im MySQL-Format (dd-mm-yyyy) erzeugen kann, so dass die Monatslängen
stimmen?
Mit einem Vergleich würde ich dann in die noch leeren Felder an den
Messtagen die Daten aus der Datenbank eintragen lassen und das Ganze
dann als Dataset für die Diagrammdarstellung verwenden.
Habe ich mich jetzt ein bisschen verständlicher ausgedrückt.

Trotzdem danke für die Antwort

heiner
Claus Reibenstein schrieb:
> heiner eiberger schrieb:
>
>> Für eine Auswertung in einem Diagramm suche ich eine Möglichkeit, mit
>> PHP ein Array zu erzeugen und darin die Datumsfelder künstlich zwischen
>> Start- und Ende-Datum der Eintragungen zu füllen.
>
> Was meinst Du mit "künstlich füllen"? Zwischenwerte berechnen und
> eintragen? Also interpolieren? Nach welcher Methode?
>
> Ein Array erzeugt man mit array(). Einen Eintrag nimmt man mit
> array[]=... (anhängen) oder array[$index]=... (einfügen oder
> überschreiben) vor (für ... die der Methode entsprechenden Formel
> einsetzen). Aber das weißt Du ja sicher.
>
> Wo liegt jetzt Dein Problem?
>
> Gruß. Claus

Re: Datumslücken füllen

am 29.09.2006 01:16:16 von Johannes Vogel

Hi heiner

TOFU verarbeitet. Bitte lerne zu quoten: http://learn.to/quote

heiner eiberger wrote:
> Claus Reibenstein schrieb:
>> heiner eiberger schrieb:
>>> Für eine Auswertung in einem Diagramm suche ich eine Möglichkeit, mit
>>> PHP ein Array zu erzeugen und darin die Datumsfelder künstlich
>>> zwischen Start- und Ende-Datum der Eintragungen zu füllen.
>> Was meinst Du mit "künstlich füllen"? Zwischenwerte berechnen und
>> eintragen? Also interpolieren? Nach welcher Methode?
>> Ein Array erzeugt man mit array(). Einen Eintrag nimmt man mit
>> array[]=... (anhängen) oder array[$index]=... (einfügen oder
>> überschreiben) vor (für ... die der Methode entsprechenden Formel
>> einsetzen). Aber das weißt Du ja sicher.
>> Wo liegt jetzt Dein Problem?
> Das Problem habe ich damit, dass ich das Datumsfeld im Array automatisch
> füllen will. Wenn die Daten im Diagramm ausgegeben werden, fehlen auf
> der X-Achse die Datenpunkte der Tage, an denen keine Messungen
> erfolgten. Ich habe mir vorgestellt, dass ich durch eine Schleife vom
> ersten Eintragungstag bis zum letzten das Datum durch PHP erzeuge und in
> das erste Feld des Arrays schreibe. Gibt es da eine passende Funktion,
> die z. B. vom 3. Juli 2005 bis 10. Oktober 2006 automatisch jedes Datum
> im MySQL-Format (dd-mm-yyyy) erzeugen kann, so dass die Monatslängen
> stimmen?

MySQL verwendet eigentlich eher das ISO-Datumsformat: yyyy-mm-dd.
Du kannst bspw. per mkdate() hochzählen.
date('Y-m-d', mkdate(0,0,0,$d,$m,$y));
wobei du $y, $m und $d0 aus dem ersten Datum rausliest und $d von $d0
bis zum zweiten Datum raufzählst. Umm die Differenz zu berechnen, reicht
vielleicht round((mkdate(...datum2...)-mkdate(...datum1...))/86400)..
oder so ähnlich...

Alternativ kannst du einfach zum aktuellen Timestamp date('U') täglich
86400 dazuzählen und das Ergebnis wieder mit date('Y-m-d',
$laufvariable) umformatieren. Letzteres kann aber erfahrungsgemäss zu
Problemen mit Sommer/Winterzeiten führen.

> Mit einem Vergleich würde ich dann in die noch leeren Felder an den
> Messtagen die Daten aus der Datenbank eintragen lassen und das Ganze
> dann als Dataset für die Diagrammdarstellung verwenden.
> Habe ich mich jetzt ein bisschen verständlicher ausgedrückt.

Du kannst das Array einfach erweitern und vor der Übergabe zur
Diagramm-Funktion durch ksort() laufen lassen.

Alle erwähnten Funktionen findest du im Manual http://www.php.net/

HTH, Johannes

Re: Datumslücken füllen

am 29.09.2006 03:36:59 von Niels Braczek

heiner eiberger schrieb:

> Ich habe eine MySQL-Datenbank mit Messdaten-Einträgen, die zeitlich w=
eit=20
> auseinander liegen.
> Für eine Auswertung in einem Diagramm suche ich eine Möglichkeit, m=
it=20
> PHP ein Array zu erzeugen und darin die Datumsfelder künstlich zwisch=
en=20
> Start- und Ende-Datum der Eintragungen zu füllen.

Warum verwendest du nicht einfach ein x-y-Diagramm? Da entsteht das
Problem gar nicht erst.

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Datumslücken füllen

am 07.10.2006 18:08:52 von heiner eiberger

Hallo Johannes!
----------------------------
MySQL verwendet eigentlich eher das ISO-Datumsformat: yyyy-mm-dd.
Du kannst bspw. per mkdate() hochzählen.
date('Y-m-d', mkdate(0,0,0,$d,$m,$y));
wobei du $y, $m und $d0 aus dem ersten Datum rausliest und $d von $d0
bis zum zweiten Datum raufzählst. Umm die Differenz zu berechnen, reicht
vielleicht round((mkdate(...datum2...)-mkdate(...datum1...))/86400)..
oder so ähnlich...

HTH, Johannes
-----------------------------------------

Danke für den Hinweis. Das Verfahren leuchtet mir ein, nur leider
erhalte ich beim Verwenden dieser Methode immer ein:
undefined function mkdate()

Ich dachte, dass mkdate() bereits eine in PHP vorhandene Funktion ist.
Liege ich da falsch?

hg heiner

Re: Datumslücken füllen

am 16.10.2006 00:16:17 von Stefan Christ

> Danke für den Hinweis. Das Verfahren leuchtet mir ein, nur leider
> erhalte ich beim Verwenden dieser Methode immer ein:
> undefined function mkdate()
>
> Ich dachte, dass mkdate() bereits eine in PHP vorhandene Funktion ist.
> Liege ich da falsch?
>
> hg heiner

Hallo Heiner,

da hat Johannes sich wohl vertan. 'mkdate()' ist keine feste
PHP-Funktion, dafür aber 'mktime()'
(http://de3.php.net/manual/de/function.mktime.php)

Dies funktioniert auch so, wie er es bereits beschrieben hatte.

MFG
Stefan