Ankündigung

Einklappen
Keine Ankündigung bisher.

UPDATE ,,, Intervall aus einem Tabellenfeld auf ein anderes anwenden

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • UPDATE ,,, Intervall aus einem Tabellenfeld auf ein anderes anwenden

    Hallo,


    PHP-Code:
    $sql "UPDATE config2 SET zeitstempel2=zeitstempel1 - INTERVAL 1 hour";
    $db->query($sql); 
    füllt den zeitstempel2 mit zeitstempel 1 minus eine Stunde ... das passt

    zeitstempel 3 soll zeitstempel 1 minus dem Wert aus der Tabellenspalte ZEITSPANNE ersetzen ... ist das irgendwie möglich?

    so gehts leider nicht:
    PHP-Code:
    $sql "UPDATE config2 SET zeitstempel3=zeitstempel1 - INTERVAL zeitspanne";
    echo 
    $sql .'<br />'// ergibt UPDATE config2 SET zeitstempel3=zeitstempel1 - INTERVAL zeitspanne
    $db->query($sql); 
    Danke für einen Hinweis!




    Werte.jpg
    struktur.jpg

  • #2
    Nummerierte Spalten- und Tabellennamen deuten auf ein Fehldesign hin. Da ist grundlegen schon irgendwas faul, das behoben gehört.

    Kommentar


    • #3
      Nicht nur das. Es ist auch redundant.

      TL;DR.

      viel mehr Fehler kann man kaum in so kurzen Code unterbringen.
      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

      Kommentar


      • #4
        Zitat von hellbringer Beitrag anzeigen
        Nummerierte Spalten- und Tabellennamen deuten auf ein Fehldesign hin. Da ist grundlegen schon irgendwas faul, das behoben gehört.
        Danke für die Rückmeldung!
        Das ist als Beispiel gedacht, wie soll ich sonst die Frage erklären?

        Kommentar


        • #5
          Zitat von p08x Beitrag anzeigen
          Danke für die Rückmeldung!
          Das ist als Beispiel gedacht, wie soll ich sonst die Frage erklären?
          So, dass man den Sinn nachvollziehen kann. Mit so gekünstelten, realitätsfremden Beispielen bringt man Andere nur auf eine falsche Fährte.

          Kommentar


          • #6
            Deine Frage hat absolut garnix mit PHP zu tun! Die gehört ins Datenbank Forum.
            PHP-Manual ¡ mysql_* ist veraltet ¡ Debugging: Finde DEINE Fehler selbst ¡ Passwort-Hashing ¡ Prepared Statements

            Kommentar


            • #7
              [MOD: verschoben von PHP-Einsteiger]
              Competence-Center -> Enjoy the Informatrix
              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

              Kommentar


              • #8
                Du kannst nur folgendes machen:
                Code:
                $sql = "UPDATE config2 SET zeitstempel3=zeitstempel1 - INTERVAL zeitspanne HOUR";
                Als Zeitspanne speicherst du nur die reine Zahl.
                Die ganze Aktion bringt jedoch nicht viel, da du mit zeitstempel3 nur eine redundante Information erzeugst die nur Zeit und Speicherplatz kostet.

                Am Rande: Hab hier nicht umsonst darauf hingewiesen, das sowas mit PHP einfacher ist.

                Kommentar


                • #9
                  Zitat von jspit Beitrag anzeigen
                  Du kannst nur folgendes machen:
                  Code:
                  $sql = "UPDATE config2 SET zeitstempel3=zeitstempel1 - INTERVAL zeitspanne HOUR";
                  Als Zeitspanne speicherst du nur die reine Zahl.

                  Nun ja ...

                  Code:
                  test=*# select * from p08x;
                   id |      startzeit      |  dauer   | endzeit
                  ----+---------------------+----------+---------
                    1 | 2017-11-07 08:00:00 | 01:00:00 |
                    2 | 2017-11-07 09:00:00 | 1 mon    |
                    3 | 2017-11-07 08:00:00 | 42:00:00 |
                  (3 Zeilen)
                  
                  test=*# update p08x set endzeit = startzeit + dauer;
                  UPDATE 3
                  test=*# select * from p08x;
                   id |      startzeit      |  dauer   |       endzeit       
                  ----+---------------------+----------+---------------------
                    1 | 2017-11-07 08:00:00 | 01:00:00 | 2017-11-07 09:00:00
                    2 | 2017-11-07 09:00:00 | 1 mon    | 2017-12-07 09:00:00
                    3 | 2017-11-07 08:00:00 | 42:00:00 | 2017-11-09 02:00:00
                  (3 Zeilen)
                  PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                  Kommentar


                  • #10
                    Zitat von jspit Beitrag anzeigen
                    Du kannst nur folgendes machen:
                    Code:
                    $sql = "UPDATE config2 SET zeitstempel3=zeitstempel1 - INTERVAL zeitspanne HOUR";
                    Als Zeitspanne speicherst du nur die reine Zahl.
                    Die ganze Aktion bringt jedoch nicht viel, da du mit zeitstempel3 nur eine redundante Information erzeugst die nur Zeit und Speicherplatz kostet.
                    das wird der nächste Versuch werden (als reine Zahl speichern),
                    Vielen Dank für den Hinweis!




                    Zitat von jspit Beitrag anzeigen
                    Am Rande: Hab hier nicht umsonst darauf hingewiesen, das sowas mit PHP einfacher ist.
                    das hat leider nicht funktioniert
                    entweder
                    c​​​​​​atchable fatal error: Object of class DateTime could not be converted to string in

                    oder

                    es wird nur 0000-00 ... gespeichert
                    obwohl Variablenwert stimmt



                    PHP-Code:
                    function FormatDatum($datum) {
                     return 
                    $time date("y-m-d H:i:s",$datum);
                    }   

                    $now FormatDatum(strtotime("now"));
                    $sql "UPDATE config2 SET zeitstempel1='$now'";
                    $db->query($sql);

                    $timestamp FormatDatum(strtotime("now"));
                    echo 
                    "timestamp now" .$timestamp .'<br />';;
                    $interval "-3 Days";
                    $date date_create($timestamp)->modify($interval);  
                    echo 
                    "Date_create" .$date->format("y-m-d H:i:s") .'<br />'; ;
                    // $sql = "UPDATE config2 SET zeitstempel0=$date"; catchable fatal error: Object of class DateTime could not be converted to string in

                    $date1 strtotime($date);
                    $sql "UPDATE config2 SET zeitstempel0='$date1'";
                    echo 
                    "sql1" .$sql .'<br />';;
                    $db->query($sql); 
                    b1.jpg








                    Kommentar


                    • #11
                      Zitat von akretschmer Beitrag anzeigen
                      Nun ja ...
                      b5.jpg
                      wenn das die Datenbank gerechnet hat, würde das passen


                      B4.jpg


                      leider wird bei mir nicht richtig gerechnet.
                      1 Stunde = 1 Sekunde
                      1 mon = keine Auswirkung
                      3 Sekunden = keine Auswirkung

                      von welchem TYP ist das Feld dauer (char?)


                      PHP-Code:

                      function FormatDatum($datum) {
                       return 
                      $time date("y-m-d H:i:s",$datum);


                      $sql "CREATE TABLE config2 (feldname CHAR(10),
                             startzeit datetime,
                             endzeit datetime,
                             dauer CHAR(8))"
                      ;

                      $db->query($sql);
                      echo 
                      $sql .'<br />';


                      $sql "INSERT INTO config2 (feldname,dauer) VALUES ('a','01:00:00'),('b','1 mon'),('c','00:00:03')";
                      $db->query($sql);
                      echo 
                      $sql .'<br />';

                      $now FormatDatum(strtotime("now"));
                      $q1 "UPDATE config2 SET startzeit='$now'";
                      $db->query($q1);

                      $sql "UPDATE config2 SET endzeit=startzeit + dauer";
                      $db->query($sql);
                      echo 
                      $sql .'<br />';

                      Return 
                      1







                      Kommentar


                      • #12
                        Zitat von p08x Beitrag anzeigen
                        von welchem TYP ist das Feld dauer (char?)
                        Ich tippe mal auf interval:

                        https://www.postgresql.org/docs/9.1/...-datetime.html

                        Kommentar


                        • #13
                          Zitat von hellbringer Beitrag anzeigen
                          Nummerierte Spalten- und Tabellennamen deuten auf ein Fehldesign hin. Da ist grundlegen schon irgendwas faul, das behoben gehört.
                          Um das noch mal deutlich zu machen in Bezug auf die Werte, die Du dort eintragen willst.
                          Sobald ein Feld sich per Funktion aus einem oder mehreren Feldern des Datensatzes ableiten lässt, willst Du es nicht als extra Feld anlegen.
                          Du greifst diesen Wert dann nur per Select ab, wenn er gebraucht wird.
                          Andernfalls müsste jedesmal, also bei jedem Update diese redundante Information nachberechnet werden, also im Updatestatement berücksichtigt werden. Das führt schnell zu Problemen.
                          Wäre man aus irgendwelchen Gründen gezwungen, die Daten dennoch (entgegen den üblichen Regeln) so abzuspeichern, dann würde man die entsprechenden Spalten wahrscheinlich nicht per Update Statement aus der Middleware aktualisieren, sondern zentral per Insert/Update Trigger.

                          Du fragst Dich vielleicht, was das soll, weil Du glaubst, dass diese Anmerkungen pingelig sind oder übertrieben irgendwie.
                          Datenbanken sind vom Anspruch her nicht einfach ahnungslose Datencontainer, sie sind unter anderem dafür gebaut, die Konsistenz der Daten zu garantieren(!). Ja, nicht einfach so ein Gewürge: "Ja, tut mir Leid, der Computer zeigt das hier so an (da kann man nichts machen)"
                          Die Datenbank kann jetzt leider nicht zaubern, garantieren(!) kann sie die Konsistenz der Daten nur, wenn man bestimmte Regeln einhält. An dem Punkt ist man hier.

                          Vielleicht alles nur unnötiges Gequatsche, denn was aus Deinem "Beispiel" leider nicht hervorgeht:
                          Ist das Interval immer konstant? Wenn ja, wenn es also statisch ist, tritt genau der Fall oben ein.
                          Ist das Interval nicht konstant, sondern meinetwegen das Result einer individuellen Angabe wie "geben sie an, wieviel Stunden vor dem Ereignis sie benachrichtigt werden möchten", erst dann muss der Wert natürlich gespeichert werden, weil er sich durch keine Funktion der Welt berechnen ließe.

                          Kommentar


                          • #14
                            Zitat von p08x Beitrag anzeigen
                            das hat leider nicht funktioniert
                            entweder
                            c​​​​​​atchable fatal error: Object of class DateTime could not be converted to string in

                            oder

                            es wird nur 0000-00 ... gespeichert
                            obwohl Variablenwert stimmt
                            Du solltest schon deinen Code zu den Fehlermeldungen zeigen. Wenn du ein DateTime-Objekt in der DB speichern möchtest, solltest du es vorab mit der format-Methode in das entsprechende Format bringen.

                            Am Rande:
                            Die DateTime-Klasse dt und andere wie Carbon haben dafür eine __toString() Methode implementiert. Damit können wo Strings benötigt werden diese Objekte direkt verwendet werden .

                            Kommentar


                            • #15
                              Zitat von hellbringer Beitrag anzeigen
                              ack.
                              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                              Kommentar

                              Lädt...
                              X