Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Ausnahme Datumsupdate

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Ausnahme Datumsupdate

    Guten Tag,

    ich habe eine Frage bzgl. der Funktion on update current_timestamp:

    Wenn ein Eintrag geupdatet wird, wird ja auch das Datum aktualisiert. So wie es auch sein soll. Gibt es aber die Möglichkeit, dass diese Funktion NICHT in Kraft tritt, wenn nur eine bestimmte Spalte aktualisiert wird?

    Genauer:
    Ich habe eine Tabelle in der die Spalten Titel, Text, Datum [...] und Counter existieren. Jede Zeile / jeder Datensatz ist ein Eintrag in einem Content Management System. Jedesmal wenn ein Datensatz ausgelesen, also ein Beitrag auf meiner Seite vom User angeklickt wird, wird Counter in dieser Zeile +1 gesetzt.

    Gibt es eine Möglichkeit zu umgehen, dass das Datum, jedes mal wenn Counter +1 gesetzt wird, aktualisiert wird?

    Danke sehr


  • #2
    Zitat von Olduwai Beitrag anzeigen

    Gibt es eine Möglichkeit zu umgehen, dass das Datum, jedes mal wenn Counter +1 gesetzt wird, aktualisiert wird?

    Danke sehr
    Ja.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Sicher ist das möglich, aber dazu müsstest Du Dir anschauen, wie es das CMS, das Du verwendest es umsetzt.
      Da musst Du eingreifen.
      Competence-Center -> Enjoy the Informatrix
      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

      Kommentar


      • #4
        Zitat von akretschmer Beitrag anzeigen
        Ja.
        Besten Dank!



        Naja das Ding ist, dass das CMS ein selbst programmiertes ist und es da nicht besonders viel gibt wo ich an der Stelle eingreifen könnte Könnte jemand den entsprechenden Befehl oder Code-Schnipsel posten? Wäre sehr nett.

        Kommentar


        • #5
          Da die Spalte mit dem "ON UPDATE CURRENT_TIMESTAMP" nennen wir diese einfach mal modified sich bei jeder Änderung eines Eintrags aktualisiert und dies von dir nicht gewünscht ist, hast du mehrere Möglichkeiten:

          1. Du erstellst eine neue Spalte in der du nur immer dann das aktuelle Datum einträgst, wenn eine von dir gewünschte Änderung vorgenommen wird. Dann könntest du das mit dem "ON UPDATE CURRENT_TIMESTAMP" vielleicht auch sein lassen, weil es eh nicht macht was du willst.

          2. Es könnte eine weitere Tabelle für deine Statistiken erstellt werden. Da du nur in dieser den Count veränderst, hat dies auf den modified keinen Einfluss.

          3. Du überschreibst den modified mit sich selbst beim Update:

          Code:
          UPDATE
              tablename
          SET
              counter = counter + 1,
              modified = modified
          WHERE
              id = 42

          Kommentar


          • #6
            Naja das Ding ist, dass das CMS ein selbst programmiertes ist und es da nicht besonders viel gibt wo ich an der Stelle eingreifen könnte
            Warum? Weil es nicht von Dir, sondern von jemand anderem ist und Du die Aufgabe hast, es anzupassen, obwohl Du keinen Plan hast, wie?!
            Da wir Dein CMS nicht kennen, können wir Dir auch keinen Code liefern, obwohl das sicher nicht der einzige Grund dafür ist...

            Dafür ne neue Spalte/Tabelle ist um das Problem herumfummeln, mehr nicht, sorry Blar.

            Prinzipiell würde ich die "ON UPDATE CURRENT_TIMESTAMP"-Klausel entfernen und für die Aktualisierung in PHP selbst sorgen.
            Wenn nötig auch über eine MySQL-Routine, aber alles andere empfinde ich als schlecht umgesetzt.
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar


            • #7
              Über einen Trigger geht das auch wunderbar.
              GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

              Kommentar


              • #8
                Bei MySQL kannst Du aber imho über den Trigger nicht die Tabelle verändern, über die der Trigger ausgelöst wurde.
                Competence-Center -> Enjoy the Informatrix
                PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                Kommentar


                • #9
                  Du änderst in dem Fall aber nicht die Tabelle, sondern nur den entsprechenden Datensatz.

                  Kommentar


                  • #10
                    Ok, wenn das geht, ist das die bessere Lösung.
                    Competence-Center -> Enjoy the Informatrix
                    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                    Kommentar


                    • #11
                      Das geht, sieht ungefähr so aus:

                      PHP-Code:
                      CREATE TRIGGER foo BEFORE UPDATE ON bar
                      FOR EACH ROW
                      BEGIN
                          
                      IF
                              NEW.
                      col1 != OLD.col1 OR
                              NEW.
                      col2 != OLD.col2 OR
                              ...
                          
                      THEN
                              SET 
                      NEW.changed NOW();
                          
                      END IF;
                      END 

                      Kommentar


                      • #12
                        Jo, haste recht. Müsste klappen über NEW.
                        Competence-Center -> Enjoy the Informatrix
                        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                        Kommentar


                        • #13
                          Arne Drews: Nö, ist komplett von mir

                          Danke Blar! Habe mich für die dritte Möglichkeit entschieden und es funktioniert! (Dachte das das nicht gehen würde, weil das Datum nach der eigentlichen INSERT-Aktion eingefügt wird, bzw. diese "überschreibt")

                          Kommentar


                          • #14
                            Arne Drews: Nö, ist komplett von mir
                            Bei dem Niveau Deiner Fragen ist letztlich nicht sehr viel von Dir. Insofern wieder mal einer, der das Board zumüllt mit Dummiefragen, um ein System zu bauen, das die Welt nicht braucht und das weniger kann, als die Lösungen , die es eh schon gibt. Wenn Dir nicht eh vor Projektabschluss die Puste ausgeht.
                            --

                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                            --

                            Kommentar

                            Lädt...
                            X