cromafi: XML Problem

Hallo in meiner Datenbank habe ich Datumsanzeigen drin im Timestamp Format.

Nun erstelle ich ein XML-File per PHP.

Der SQL Befehl sieht so aus:

$query = $db->dbquery("SELECT * FROM XYZ WHERE daten like '%$timestamp_heute%'");

und $timestamp_heute ist dies:

$datum_heute  = date("d.m.Y");
$timestamp_heute  = mktime($datum_heute);

Jedoch bringt er mir nichts heraus OBWOHL in der DB etwas vorhanden ist..???!!!

danke und gruss

  1. Hello,

    $query = $db->dbquery("SELECT * FROM XYZ WHERE daten like '%$timestamp_heute%'");

    du speicherst deinen Timestamp in einer Textspalte? Ernsthaft? Zumindest fällt mir sonst keine sinnvolle Verwendung von LIKE ein. Falls ja, dann ist das ein grober Datenmodellierungsfehler, das wird dir früher oder später das Genick brechen.

    Ansonsten, wie lautet denn dein fertiges Statement (ohne die PHP-Variable), daraus lässt sich u.U. mehr ableiten.

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    I will never understand why Germans feel the need to kill trees  --  Arbeitskollege aus UK zum Thema ob eine Dokumentation elektronisch oder auf Papier ausgeliefert wird
    1. Hello,

      $query = $db->dbquery("SELECT * FROM XYZ WHERE daten like '%$timestamp_heute%'");
      du speicherst deinen Timestamp in einer Textspalte? Ernsthaft? Zumindest fällt mir sonst keine sinnvolle Verwendung von LIKE ein. Falls ja, dann ist das ein grober Datenmodellierungsfehler, das wird dir früher oder später das Genick brechen.

      Ansonsten, wie lautet denn dein fertiges Statement (ohne die PHP-Variable), daraus lässt sich u.U. mehr ableiten.

      MfG
      Rouven

      Nein ist nicht in einer Textspalte, keine Sorge ;-)

      Z.B.
      SELECT * FROM XYZ WHERE datum = '1189116000';

      1. Hallo,

        in meinen Augen ist es auch ein Modellierungsfehler, UNIX-Timestamps statt Datumswerte zu verwenden.

        Nein ist nicht in einer Textspalte, keine Sorge ;-)
        SELECT * FROM XYZ WHERE datum = '1189116000';

        welches Datenbankmanagementsystem? (vermutlich MySQL)
        welche Version?
        welcher Spaltentyp?

        Freundliche Grüße

        Vinzenz

        1. Hallo,

          in meinen Augen ist es auch ein Modellierungsfehler, UNIX-Timestamps statt Datumswerte zu verwenden.

          Nein ist nicht in einer Textspalte, keine Sorge ;-)
          SELECT * FROM XYZ WHERE datum = '1189116000';

          welches Datenbankmanagementsystem? (vermutlich MySQL)
          welche Version?
          welcher Spaltentyp?

          Freundliche Grüße

          Vinzenz

          mysql 2.6.4-pl2
          ist tatsächlich "text" spaltentyp..
          das hat mein vorgänger so eingestellt....

          Nun das ganze System ist nun so aufgebaut und ich muss die timestamps verwenden..!

          1. Vorab: Bitte zitiere nur das, worauf sich Deine Antwort bezieht. Das erleichtert das Lesen ungemein.

            mysql 2.6.4-pl2

            Ähm, das ist die Version von phpMyAdmin. Auf der Startseite der Software findest Du die MySQL-Version, die auf dem Server läuft.

            ist tatsächlich "text" spaltentyp..

            Schlecht, das solltest Du umstellen.

            Nun das ganze System ist nun so aufgebaut und ich muss die timestamps verwenden..!

            Debugge Dein Script. Welchen Wert hat $timestamp_heute, wie sehen die Werte in der DB aus? Hast Du beachtet, dass ein Unix-Timestamp bis zur Sekunde genau ist? Damit gehören zu einem Tagesdatum insgesamt 86.400 verschiedene Zeitstempel. Eventuell hilft Dir STRCMP() weiter.

            Siechfred

            --
            Hinter den Kulissen passiert viel mehr, als man denkt, aber meistens nicht das, was man denkt.
            1. Debugge Dein Script. Welchen Wert hat $timestamp_heute, wie sehen die Werte in der DB aus? Hast Du beachtet, dass ein Unix-Timestamp bis zur Sekunde genau ist? Damit gehören zu einem Tagesdatum insgesamt 86.400 verschiedene Zeitstempel. Eventuell hilft Dir STRCMP() weiter.

              Sorry wegen dem Zitieren:

              Also Beispiel in der DB eines Timestamp:

              Habe folgende Zahlen drin: 1189116000

              Nun mein PHP Code:
              $datum_heute  = date("d.m.Y");
              $timestamp_heute  = mktime($datum_heute);

              und der SQL Syntax sucht nach dem "$timestamp_heute".

              Somit wird klar das ich genau nur das brauche: Tag.Datum.Jahr

              1. Somit wird klar das ich genau nur das brauche: Tag.Datum.Jahr

                Dann wende FROM_UNIXTIME und ggf. DATE_FORMAT auf den Spaltenwert an, z.B. so:

                SELECT  
                  spalten  
                FROM  
                  tabelle  
                WHERE  
                  DATE_FORMAT(FROM_UNIXTIME(datumsspalte), '%Y%m%d') = 20071128
                

                Das wirft alle Datensätze aus, deren Timestamp zum 28.11.2007 passt. Wenn Du in PHP sowas schreibst wie

                $datum = date("Ymd");

                kannst Du das Ergebnis problemlos in Deine Abfrage einbauen, wie oben beschrieben.

                Siechfred

                --
                Hinter den Kulissen passiert viel mehr, als man denkt, aber meistens nicht das, was man denkt.
                1. Somit wird klar das ich genau nur das brauche: Tag.Datum.Jahr

                  Dann wende FROM_UNIXTIME und ggf. DATE_FORMAT auf den Spaltenwert an, z.B. so:

                  SELECT

                  spalten
                  FROM
                    tabelle
                  WHERE
                    DATE_FORMAT(FROM_UNIXTIME(datumsspalte), '%Y%m%d') = 20071128

                    
                  Danke für die Antwort..  
                    
                  Ich habe es nun herausgefunden jedoch stimmt bei mir der SQL Syntax nicht  
                    
                  das wäre die Variable:  
                  ~~~php
                    
                  $heute  = mktime(0, 0, 0, date("m")  , date("d"), date("Y"));  
                  
                  

                  SQL:

                    
                  SELECT * FROM pi_inserate WHERE daten = '$heute'  
                  
                  

                  Doch er bringt mir nicht alle Einträge.. Das Problem liegt halt daran das ich eig. die Daten von Heute, Gester und Vorgestern brauche.

                  Hast du dafür eine Lösung?

                  1. Das Problem liegt halt daran das ich eig. die Daten von Heute, Gester und Vorgestern brauche.

                    *seufz* und damit rückst Du erst jetzt heraus.

                    Hast du dafür eine Lösung?

                    Schau Dir die Einleitung zu den Datums-  und Zeitfunktionen an, da wird das mit DATE_SUB und INTERVAL gelöst, die Erklärung zu den Funktionen folgt dann weiter unten auf der verlinkten Seite.

                    Siechfred

                    --
                    Hinter den Kulissen passiert viel mehr, als man denkt, aber meistens nicht das, was man denkt.
                    1. *seufz* und damit rückst Du erst jetzt heraus.

                      Sorry wollte nicht das ihr mit unendlichen Fragen belastet werdet ;)

                      Schau Dir die Einleitung zu den Datums-  und Zeitfunktionen an, da wird das mit DATE_SUB und INTERVAL gelöst, die Erklärung zu den Funktionen folgt dann weiter unten auf der verlinkten Seite.

                      Hab ich gemacht, leider verstehe ich überhaupt nichts

  2. Hallo,

    was hat das ganze mit XML zu tun?

    Wenn deine Query mit WHERE Klausel keine Daten hervorbringt, dann versuchst du es vielleicht einmal ganz ohne WHERE und schaust, welchen Inhalt es in daten hat.

    Jedoch bringt er mir nichts heraus OBWOHL in der DB etwas vorhanden ist..???!!!

    Es muss ja nicht deiner Abfragebedingung (WHERE) entsprechen?

    Ciao, Frank