Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zu strtotime bzw. mktime

Einklappen

Neue Werbung 2019

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

  • Frage zu strtotime bzw. mktime

    Hallo,

    ich versuche gerade, wegen eines Softwarewechsels Daten von einer alten mysql - Tabelle A in eine neue Tabelle B zu kopieren.
    Dabei stoße ich auf das folgende Problem:
    Tabelle A enthält ein Feld "lastreply" im Format Datetime.
    Tabelle B enthält ein entsprechendes Feld im Format int(10).
    Also kann ich die Daten hier nicht direkt von A nach B kopieren.
    Ich hatte nun die Idee, der Tabelle A ein neues Feld "lastreply2" im Format int(10) hinzuzufügen und hier mit Hilfe von strtotime oder auch mktime die Zeitangabe aus dem Originalfeld im richtigen Format einzufügen und anschließend nicht lastreply, sondern lastreply2 nach Tabelle B zu kopieren.
    Allerdings stoße ich bei der Anwendung beider Funktion sehr schnell an meine Grenzen.
    Hat vielleicht jemand eine Idee, wie ich den Befehl konkret gestalten muß, damit es funktioniert?
    Also nochmal ganz konkret: Ich möchte in der Tabelle cp_threads entweder das Format und den Inhalt des Feldes lastreply von datetime nach int(10) umwandeln oder den Inhalt von lastreply im Format int(10) nach lastreply2 kopieren.
    Dankeschön!

    Gruss

    Geriatrix

  • #2
    Zitat von Geriatrix Beitrag anzeigen
    Hallo,

    ich versuche gerade, wegen eines Softwarewechsels Daten von einer alten mysql - Tabelle A in eine neue Tabelle B zu kopieren.
    Dabei stoße ich auf das folgende Problem:
    Tabelle A enthält ein Feld "lastreply" im Format Datetime.
    Tabelle B enthält ein entsprechendes Feld im Format int(10).
    Du bzw. die Software verschlechtert sich. Sollte eigentlich andersrum sein.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Ich stelle einfach auf ein wesentlich leistungsfähigeres Forensystem um.
      Die Frage, warum sie es tun, stelle ich mir dabei nicht. Woltlab verwendet nun mal int(10) dafür.

      Gruss

      Geriatrix

      Kommentar


      • #4
        Zitat von Geriatrix Beitrag anzeigen
        Ich stelle einfach auf ein wesentlich leistungsfähigeres Forensystem um.
        Die Frage, warum sie es tun, stelle ich mir dabei nicht. Woltlab verwendet nun mal int(10) dafür.
        Wenn sie das tun, haben sie sicherlich auch irgendwo eine Funktion deklariert, die einen echten Timestamp in ihr Integerformat wandelt. Bei Integer kann man Sekunden, also höchstwahrscheinlich POSIX-Timestamps vermuten. Für letztere haben alle in PHP eingebauten Zeitrechnungserweiterungen passende Funktionen. Das muss aber nicht so sein.

        strtotime oder auch mktime ...
        Allerdings stoße ich bei der Anwendung beider Funktion sehr schnell an meine Grenzen.
        Hat vielleicht jemand eine Idee, wie ich den Befehl konkret gestalten muß, damit es funktioniert?
        So lange du nicht sicher sagen kannst, welches Format du in welches umwandeln möchtest: eher nicht ...
        Wenn man die Wurst schräg anschneidet, hält sie länger, weil die Scheiben größer sind.

        Kommentar


        • #5
          Ich dachte, ich hätte das ziemlich klar gesagt:
          Ich möchte datetime in int(10) umwandeln.
          Solange ich noch die Teilmigraton der Daten betreibe, halte ich mich auch nicht direkt im Forum aus, sondern führe eigene scripte bzw. phpmyadmin aus.

          Name Typ Kollation Attribute Null Standard
          lastPostID int(10) Ja NULL
          so schaut das Zielfeld in der Tabelle von Woltlab aus.
          Und das ist mein Quellfeld aus der alten Software:
          lastreply datetime Nein 0000-00-00 00:00:00

          Gruß

          Geriatrix

          Kommentar


          • #6
            Zitat von Geriatrix Beitrag anzeigen
            Ich dachte, ich hätte das ziemlich klar gesagt:
            Ich möchte datetime in int(10) umwandeln.
            Wenn ein Datum (bzw. Datum mit Uhrzeit) als INT gespeichert wird dürfte das meistens ein Unixtimestamp sein - zur Umwandlung von DATETIME nach INT sollte also ein UNIX_TIMESTAMP() reichen, aber …

            Zitat von Geriatrix Beitrag anzeigen
            Name Typ Kollation Attribute Null Standard
            lastPostID int(10) Ja NULL
            so schaut das Zielfeld in der Tabelle von Woltlab aus.
            Und das ist mein Quellfeld aus der alten Software:
            lastreply datetime Nein 0000-00-00 00:00:00
            … das sieht mir eher so aus als wolltest du die Zeitstempel in die falsche Spalte schieben. Bei dem Spaltennamen »lastPostID« würde ich eher vermuten dass dort die ID eines Postings reingehört, kein Zeitpunkt.

            Kommentar


            • #7
              Hallo,

              da hast Du völlig Recht!
              Wenn auch am Ende die lastPostID in den gleichen Kopiervorgang einfließen wird, muss doch lastreply nach lastPostTime kopiert werden.

              Soweit so gut, aber was mache ich denn nun mit UNIX_TIMESTAMP?

              Gruss

              Geriatrix

              Kommentar


              • #8
                Siehe http://dev.mysql.com/doc/refman/5.5/...unix-timestamp
                Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                Kommentar


                • #9
                  Hallo,

                  bei dieser Doku bin ich natürlich schon gestern nach der Antwort von tk1234 gelandet.
                  Allerdings hat sie mich ziemlich ratlos zurückgelassen.
                  Da ich normalerweise so gut wie fast wenig programmiere, habe ich nach der Doku keine Ahnung, wie ich einen Befehl aufbauen muss, der mit entweder lastreply oder auch ein neues Feld lastreply2 in die korrekte Form bringt.

                  Gruss

                  Geriatrix

                  Kommentar


                  • #10
                    update `tabelle`set `lastreply2`= unix_timestamp(`lastreply`)
                    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                    Kommentar


                    • #11
                      Bei WBB und Leistungsfähig fällt mir spontan Lizenzgeißel und Erweiterungsbehinderung ein.
                      [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                      Kommentar

                      Lädt...
                      X