Pascal Müller: MySQL-Select Problem

Hallo allerseits!
vielleicht kann mir ja jemand bei folgendem Problem helfen:

ich hab diese Variable: $letzterdonnerstag (gibt "2005-09-01" aus)

Danach möchte ich _einen_ Datensatz aufrufen, dessen Datum grösser oder gleich "$letzterdonnerstag" ist. Das MySQL-Feld "datum" ist zb. 2005-09-07

$sql = "SELECT * FROM tm_news WHERE kategorie='1' AND datum >= $letzterdonnerstag LIMIT 1";

nur: das ganze gibt mir nie diesen neueren Datensatz aus.

Vielen Dank für Eure Mithilfe.

  1. Ahoi Pascal Müller,

    nur: das ganze gibt mir nie diesen neueren Datensatz aus.

    ich versteh dein problem nicht ganz, aber ein ORDER BY datum (desc) könnte helfen.

    MfG

    --
    Alle Angaben wie immer ohne Gewähr
    LEISE IST SCHEISSE!
    1. Hi

      Ich verstehe dein Problem, hatte genau das selbe!

      Der Haken liegt an der Sprachformatierung! Da gibt es große Unterschiede wie PHP und MYSQL das Datum formatieren.

      Ich habe es so gelöst, dass ich mir das Datum aus der MYSQL DB herausgeholt habe und es dann mittels PHP mit der $variable verglichen habe.

      Lass dir mal beide Daten ausgeben, sieh dir an wie sie formatiert sind und dann versuch sie auf selben Nenner zu bringen.
      Hab ca. 2 Tage zugebracht aber keine effizientere Lösung gefunden.

      lg Greedy Raccoon

      1. Hi

        das Datum wird jeweils YYYY-MM-DD (Norm) ausgegeben.
        Darauf hab ich schon geschaut...

        Pascal

      2. Ahoi Greedy_Raccoon,

        Der Haken liegt an der Sprachformatierung! Da gibt es große Unterschiede wie PHP und MYSQL das Datum formatieren.

        PHP formatiert das datum so wie du es willst.

        • TT.MM.JJJJ
        • MM-TT-JJJJ
        • JJJJ-MM-TT
          etc.
          MySQL formatiert (wegen der Sortierungseinfachheit) JJJJ-MM-TT

        MfG

        --
        Alle Angaben wie immer ohne Gewähr
        LEISE IST SCHEISSE!
  2. Ahoi Pascal Müller,

    $sql = "SELECT * FROM tm_news WHERE kategorie='1' AND datum >= $letzterdonnerstag LIMIT 1";

    ^^hier fehlen die ''

    MfG

    --
    Alle Angaben wie immer ohne Gewähr
    LEISE IST SCHEISSE!
    1. Hallo Daniel,

      ^^hier fehlen die ''

      Wenn du 'Anführungszeichen' setzt, kann man es erst recht nicht mit Hilfe von >= vergleichen.
      Dann wäre es wie ein Vergleich von 'Äpfel'>='Birnen'.
      Und das funktioniert imho nicht.

      Gruß,
      Sebastian

      1. echo $begrüßung;

        Wenn du 'Anführungszeichen' setzt, kann man es erst recht nicht mit Hilfe von >= vergleichen.

        Wenn du ein Datumswert als 2005-09-01 ohne Anführungszeichen an MySQL übergibst, dann sieht da MySQL nur Zahlen und zwei Minuszeichen. Es rechnet dir dann diesen Ausdruck aus: 2005 minus 9 minus 1. Das wirst du sicher nicht wollen. In Anführungszeichen einschließen ist schon richtig.

        echo "$verabschiedung $name";

      2. Ahoi Sebastian,

        Dann wäre es wie ein Vergleich von 'Äpfel'>='Birnen'.
        Und das funktioniert imho nicht.

        korekt, schließlich ist da ein Ä das könnte probleme geben,
        'Aepfel'>='Birnen' gibt fals da B>A bei der sortierung eines Datums
        ist bei MySQL aufgrund des Formates ziemlich einfach

        2005 = 2005
        -    =    -
        09   =   09
        -    =    -
        07   >   01

        => 2005-09-07 > 2005-09-01

        Alles klar? deshalb gibts es ja die probleme wenn man z.B. Daten im deutschen format vergleicht

        MfG

        --
        Alle Angaben wie immer ohne Gewähr
        LEISE IST SCHEISSE!
  3. Hallo Pascal,

    das sicherste ist, wenn du sowohl das DB-Feld datum als auch die Variable $letzterdonnerstag als Unix-Time anlegst. Dann ist es ein einfacher Zahlenstring, den du auf jeden Fall mit Operatoren wie >= berädern kannst.

    Gruß -
    Sebastian

  4. habs jetzt so gelöst:

    $sql = "SELECT * FROM tm_news WHERE kategorie='1' AND CURRENT_DATE >= datum LIMIT 1";

    Funktioniert für meine Bedürfnisse in diesem Fall.

    1. Ahoi Pascal Müller,

      $sql = "SELECT * FROM tm_news WHERE kategorie='1' AND CURRENT_DATE >= datum LIMIT 1";
      Funktioniert für meine Bedürfnisse in diesem Fall.

      Wage ich zu bezweifeln da nächste woche das aktuelle datum immernoch
      größer ist wie das wo in datum steht wirst du unter Umständen immer
      den gleichen datensatz bekommen. Daher solltest du ein ORDER BY datum
      DESC noch hinzufügen.

      MfG

      --
      Alle Angaben wie immer ohne Gewähr
      LEISE IST SCHEISSE!
      1. den gleichen datensatz bekommen. Daher solltest du ein ORDER BY datum
        DESC noch hinzufügen.

        order by war schon gut, aber aufsteigend! würde eventuell auch ohne funktionieren, wenn die tabelle nach datum sortiert würde.

        1. Hi,

          order by war schon gut, aber aufsteigend! würde eventuell auch ohne funktionieren, wenn die tabelle nach datum sortiert würde.

          Und wie soll die Tabelle ohne "order by" sortiert werden?

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Und wie soll die Tabelle ohne "order by" sortiert werden?

            indem die tabelle physisch aufsteigend nach datum sortiert wird.

  5. ich hab diese Variable: $letzterdonnerstag (gibt "2005-09-01" aus)

    Danach möchte ich _einen_ Datensatz aufrufen, dessen Datum grösser oder gleich "$letzterdonnerstag" ist. Das MySQL-Feld "datum" ist zb. 2005-09-07

    $sql = "SELECT * FROM tm_news WHERE kategorie='1' AND datum >= $letzterdonnerstag LIMIT 1";

    Bei mir funktioniert das, wenn ich um das Datum noch Anführungszeichen mache und wenn du nur den allerneusten haben willst, musst du natürlich noch nach dem Datum sortieren.

    Struppi.