phpbar.de logo

Mailinglisten-Archive

[php] Wie finde ich einen zeitlich relevanten Eintrag in MySQL?

[php] Wie finde ich einen zeitlich relevanten Eintrag in MySQL?

Christian Knorr php-de_mailingliste at sofort-start.de
Mit Okt 1 07:05:20 CEST 2008


Am Mittwoch 01 Oktober 2008 02:08:17 schrieb Carlo:
> Hallo Cris,
Hallo Carlo,

> > Zeit Zählerstand  Diff
> > 01.01. 5000 0
> > 02.01. 5010 10
> > 03.01. 5020 20
> > 04.01. 0    30 (Zählerwechsel bei 5030)
> > 05.01. 10   40
> > 06.01. 20   50
>
> da steckt ein Denkfehler drin, der Zählerwechsel benötigt
> zwei Eintragungen, siehe weiter unten.
Das gibt der Kunde auf einer speziellen Zählerwechsel-Seite ein.
Dann erscheint der neue Zählerstand unter "Zählerstand" (in dem Fall die 
Null), aber die korrekte Differenz in "Diff" (in dem Fall 5030 - 5020 + 20).

> > Wenn jetzt als nächstes der Zählerstand am 08.01. kommt, ich
> > aber den vom 07.01. nachreichen will stoße ich auf das Problem.
>
> nöö ;-)
Ja is’ ja schon guut ;-)

> Und nun mein Beispiel:
> CREATE TABLE elektro (
>   zeit    datetime NOT NULL default '0000-00-00 00:00:00',
>   stand   int(11) NOT NULL default 0,
>   PRIMARY KEY (zeit)
> ) TYPE=MyISAM;
>
> INSERT INTO strom (zeit, stand) VALUES # die Basis
>  ('2008-01-01 13:57:14', 5001),
>  ('2008-01-02 14:46:25', 5012),
>  ('2008-01-03 15:35:36', 5023),
>  ('2008-01-04 16:24:47', 4),
>  ('2008-01-05 17:13:58', 15),
>  ('2008-01-06 18:02:09', 26);
> INSERT INTO strom (zeit, stand) VALUES # Nachtrag Zählerwechsel
>  ('2008-01-04 15:57:33', 5037);
> INSERT INTO strom (zeit, stand) VALUES
>  ('2008-01-08 11:47:11', 48);
> INSERT INTO strom (zeit, stand) VALUES # Nachtrag
>  ('2008-01-07 11:23:33', 39);
>
> mysql> select * from strom;
> +---------------------+-------+
>
> | zeit                | stand |
>
> +---------------------+-------+
>
> | 2008-01-01 13:57:14 |  5001 |
> | 2008-01-02 14:46:25 |  5012 |
> | 2008-01-03 15:35:36 |  5023 |
> | 2008-01-04 16:24:47 |     4 |
> | 2008-01-05 17:13:58 |    15 |
> | 2008-01-06 18:02:09 |    26 |
> | 2008-01-04 15:57:33 |  5037 |
> | 2008-01-08 11:47:11 |    48 |
> | 2008-01-07 11:23:33 |    39 |
>
> +---------------------+-------+
> zeigt, dass alles schön durcheinander steht, und das ist gut so.
> Datenbanktabellen sind definitionsgemäß ordnungslose Mengen.
Keinen Einwand. Durcheinander ist es jetzt ja auch bei mir.

> Und nun versuche ich eine Abfrage zu bauen, die Dir zu jeder Zeit
> verwendbare Werte ausgibt, also auch zwischen den Nachträgen.
>
> Zuerst brauchen wir eine Variable:
> SET @older=4987;  # ein älterer Zählerstand
>
> Und dann kann es losgehen:
>   SELECT zeit, stand,
>       IF (@older < stand, stand - @older, 0) AS verbrauch,
>       (@older := stand) AS help
>     FROM strom
> ORDER BY zeit;
Hier stört mich die Null in der IF-Anweisung. Das Thema Zählerwechsel ist auch 
neu für mich, sonst hätte ich mir da vorher Gedanken drüber gemacht.
Aber bei’m Wechsel, hat der neue Zähler nicht Null, sondern in meinem Fall 5,9 
(wegen Eichung vielleicht?).
Das heißt diese 5,9 müsste ich wieder irgendwo speichern. In dieser Tabelle, 
oder in einer Anderen? Z.B. die Usertable?

> +---------------------+-------+-----------+------+
>
> | zeit                | stand | verbrauch | help |
>
> +---------------------+-------+-----------+------+
>
> | 2008-01-01 13:57:14 |  5001 |        14 | 5001 |
> | 2008-01-02 14:46:25 |  5012 |        11 | 5012 |
> | 2008-01-03 15:35:36 |  5023 |        11 | 5023 |
> | 2008-01-04 15:57:33 |  5037 |        14 | 5037 |
> | 2008-01-04 16:24:47 |     4 |         0 |    4 |
> | 2008-01-05 17:13:58 |    15 |        11 |   15 |
> | 2008-01-06 18:02:09 |    26 |        11 |   26 |
> | 2008-01-07 11:23:33 |    39 |        13 |   39 |
> | 2008-01-08 11:47:11 |    48 |         9 |   48 |
>
> +---------------------+-------+-----------+------+
> Wie man sieht kann man jederzeit Werte in die Tabelle nachtragen,
> ohne dass es zu Fehlern kommt.
Das liest sich echt gut - und logisch. Gefällt mir!

> Wünschenswert wäre eventuell noch 
> eine Ausgabe der Dauer in Stunden, damit größere Zeiträume sofort
> ins Auge fallen. Aber ich will Dir nicht alles wegnehmen ;-)
Das ist schon fertig. (Fertig? Wird sowas jemals ferig? ;-) )
Stillstand = Rückschritt
Und zwar grafisch. Zum Thema Auge. Das war ja überhaupt der Anreiz dieser 
Funktion. Wenn Du Interesse hast Deinen Stromverbrauch zu analysieren lade 
ich Dich herzlich ein. Es ist zwar noch Alpha-Stadium, aber unter dem 
Gesichtspunkt "testen" trotzdem schon öffentlich.

> mit bestem Gruß Carlo
Super, vielen Dank für Deine Hilfe!

Bis später, Chris.....

P.S. ja Halt, Sekunde, ich sehe gerade beim Ãœberfliegen:
> +---------------------+-------+-----------+------+
> | zeit                | stand | verbrauch | help |
> +---------------------+-------+-----------+------+
>
> | 2008-01-04 16:24:47 |     4 |         0 |    4 |
Das löst mein Problem mit den 5,9 statt 0 doch ebenso gut *confused*.
Also sollte das doch genau das machen was ich erwarte!?

php::bar PHP Wiki   -   Listenarchive