Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Stündlicher Abgleich aktueller Zeit zu Schichtzeiten

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Naildo, 11 Juni 2014.

  1. Naildo

    Naildo Neuer Benutzer

    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: 11 Juni 2014
  2. akretschmer

    akretschmer Datenbank-Guru

    Welcher Teil ist da nun das Problem?

    Das ginge z.B. via CRON, das ginge aber auch via TRIGGER durch die DB selber.
     
  3. Walter

    Walter Administrator Mitarbeiter

    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.
     
  4. ukulele

    ukulele Datenbank-Guru

    Mir gefällt das ganze Design nicht, warum macht man sowas?^^
     
  5. BerndB

    BerndB Datenbank-Guru

    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
     
  6. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  7. BerndB

    BerndB Datenbank-Guru

    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden