Stündlicher Abgleich aktueller Zeit zu Schichtzeiten

Naildo

Neuer Benutzer
Beiträge
1
Hallo zusammen,

ich stehe etwas bedingt auf dem Schlauch :-/ folgendes möchte ich versuchen umzusetzen.

Ich habe drei Zeitfenster zu denen die Vorgabe in einer Tabelle stehen (Tabelle_MEINEZEITFENSTER 6-11 | 11-15 | 15-19) dazu läuft ein Counter der mir die weggeschriebenen Daten in diesen drei Zeitfenstern fortlaufend mitzählt. Nun möchte ich einen weiteren Counter einsetzen, der allerdings zu jedem Zeitfenster wieder genullt werden soll. Quasi zurückgesetzt... Meine Idee ist: einen DB-Job laufen zu lassen, der stündlich immer um kurz nach jeder vollen Stunde in die Tabelle_MEINEZEITFENSTER schaut und um 11:01, um 15:01 und um 19:01 den Counter zurücksetzt :-/ hoffe ich hab das verständlich erklärt mensch!

Zusammengefasst: der Job soll um eine Minute nach 7 nach 8 nach 9 usw usw in die Tabelle_MEINEZEITFENSTER schauen und sobald er sieht aaaaaaaaaaah hintere Zahl ist 11:00 oder 15:00 oder 19:00 dann soll er den Counter nullen.

Danke Euch und Grüße
 
Zuletzt bearbeitet:
Werbung:
Zusammengefasst: der Job soll um eine Minute nach 7 nach 8 nach 9 usw usw in die Tabelle_MEINEZEITFENSTER schauen und sobald er sieht aaaaaaaaaaah hintere Zahl ist 11:00 oder 15:00 oder 19:00 dann soll er den Counter nullen.

Danke Euch und Grüße

Welcher Teil ist da nun das Problem?

Das ginge z.B. via CRON, das ginge aber auch via TRIGGER durch die DB selber.
 
Und wenn der CRON-Job mal aus irgendeinem Grund nicht läuft dann crasht Deine Applikation oder produziert falsche Daten? Mir gefällt der Ansatz überhaupt nicht.
 
Hallo,

so gehts auch. Einfach beim reinschreiben den Counter berechnen

INSERT INTO eintraege
SELECT
'' AS id,
(SELECT id FROM schichten s WHERE CURTIME() BETWEEN s.from AND s.to) AS `schicht_id`,
IF( MAX(cnt) IS NULL, 1, MAX(cnt+1)) AS cnt,
NOW() AS insert_at,
'Neuer Eintrag' AS bezeichnung
FROM eintraege
WHERE `schicht_id` = (SELECT id FROM schichten s WHERE CURTIME() BETWEEN s.from AND s.to)
AND insert_at BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 1 DAY);

MariaDB [bernd]> select * from schichten;
+----+----------+----------+
| id | from | to |
+----+----------+----------+
| 1 | 09:00:00 | 13:00:00 |
| 2 | 13:00:00 | 14:10:00 |
| 3 | 14:10:00 | 14:40:00 |
| 4 | 14:40:00 | 15:00:00 |
+----+----------+----------+
4 rows in set (0.00 sec)

MariaDB [bernd]> select * from eintraege;;
+----+------------+------+---------------------+---------------+
| id | schicht_id | cnt | insert_at | bezeichnung |
+----+------------+------+---------------------+---------------+
| 1 | 2 | 1 | 2014-06-12 13:45:36 | Test |
| 12 | 3 | 1 | 2014-06-12 14:38:52 | Neuer Eintrag |
| 13 | 3 | 2 | 2014-06-12 14:38:53 | Neuer Eintrag |
| 14 | 3 | 3 | 2014-06-12 14:38:54 | Neuer Eintrag |
| 15 | 3 | 4 | 2014-06-12 14:39:42 | Neuer Eintrag |
| 16 | 3 | 5 | 2014-06-12 14:39:43 | Neuer Eintrag |
| 17 | 3 | 6 | 2014-06-12 14:39:43 | Neuer Eintrag |
| 18 | 3 | 7 | 2014-06-12 14:39:43 | Neuer Eintrag |
| 19 | 3 | 8 | 2014-06-12 14:39:44 | Neuer Eintrag |
| 20 | 4 | 1 | 2014-06-12 14:40:03 | Neuer Eintrag |
+----+------------+------+---------------------+---------------+
10 rows in set (0.00 sec)



Tabelle 1:
MariaDB [bernd]> DESCRIBE eintraege;
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| schicht_id | int(11) | YES | | NULL | |
| cnt | int(4) | YES | | NULL | |
| insert_at | timestamp | YES | | NULL | |
| bezeichnung | varchar(32) | YES | | | |
+-------------+------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

Tabelle 2:

MariaDB [bernd]> DESCRIBE schichten;
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| from | time | YES | | NULL | |
| to | time | YES | | NULL | |
+-------+------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

Gruss

Bernd
 
Hallo,

so gehts auch. Einfach beim reinschreiben den Counter berechnen

Bernd

Ich glaub, jetzt hab ich erst einmal verstanden, was der Fragesteller überhaupt will. Und da muß ich sagen: so würde ich es auch nicht machen. Wenn da eine Zeile jetzt mittendrin gelöscht wird stimmt es nicht mehr. Sowas kann man bequem bei der Abfrage berechnen. Gut, nicht mit MySQL. Dann halt in der Applikation. Ansonsten wäre row_number() over (partition by ... order by ...) die wohl beste Lösung.
 
Werbung:
UPS,

hab ich was falsches geschrieben ? Ich hab auch keinen Schimmer wie die DB in der Realität aussieht und welche Felder wie verknüpft sind.
Dies sollte auch nur ein Beispiel als Hilfestellung sein

Gruss

Bernd
 
Zurück
Oben