Markus: MYSQL select Abfrage Problem mit or

Hallo,

Bei einer MYSQl Abfrage koennen sich User Veranstaltungen listen lassen. Kriterium ist der Termin, der vom User ausgewählt wird (....Ende Januar, Anfang Februar, Mitte Februar....). Eine Veranstaltung geht z.B. vom 28.01. - 6.02.04, liegt also vom Termin bei Ende Januar und Anfang Februar. In der Datenbank ist Sie mit EJ für Ende Januar gelistet. Wenn ein User jetzt Anfang Februar als Termin eingibt, wird obige Veranstaltung nicht gelistet.
Meine Idee, lege noch eine Spalte Termin1 in der Datenbank an und trage dort bei Veranstaltungen mit Überschneidungen die zweite Terminoption ein - hier z.B. dann AF für Anfang Februar und schreibe als Select Anweisung:
SELECT Veranstaltung where Termin = '$zeit' or Termin = '$zeit1';
Nur dass funktioniert ja nicht, da bei Vergleichen nur mit NULL or NOt Null gearbeitet werden kann.

Wer hat eine Idee für mein hoffendlich verständlich beschriebenes Problem.
Sonnige Gruesse aus Hannover
Markus

  1. Hi,

    Meine Idee, lege noch eine Spalte Termin1 in der Datenbank an und trage dort bei Veranstaltungen mit Überschneidungen die zweite Terminoption ein

    die Idee, den Termin in eine zweite Tabelle auszulagern, um die 1:n-Beziehungen korrekt handzuhaben, gefällt mir besser.

    Nur dass funktioniert ja nicht, da bei Vergleichen nur mit NULL or NOt Null gearbeitet werden kann.

    Äh ... häh?

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Hallo,

    Eine Veranstaltung geht z.B. vom 28.01. - 6.02.04, liegt also vom Termin bei Ende Januar und Anfang Februar. In der Datenbank ist Sie mit EJ für Ende Januar gelistet.  (...)
    AF für Anfang Februar

    Es ist IMHO sehr ungeschickt, Kalenderdaten mit irgendwelchen Strings zu codieren.

    MySQL hat doch extra den Typ "DATETIME", oder andere, siehe
    http://www.mysql.com/doc/de/Date_and_time_types.html

    Ich wuerde es so machen:
    Zwei Variablen vom Typ DATETIME:
    startdatum, enddatum
    (Bei Veranstaltungen, die nur einen Tag dauern, sind beide Werte gleich.
    Zudem kannst Du, wenn Du willst, auch die Uhrzeit gleich in die gleiche
    Variable packen.)

    Dann kannst Du auch ganz bequem vergleichen und SELECT-Anfragen machen.

    Wenn der Benutzer einen Zeitraum ausgewaehlt hat, sei es, indem er
    die Daten von Hand eintippt, sei es, indem er auf einen Button/Link klickt
    und die von Dir vorgeschlagene Periode "Zweite Haelfte Februar" waehlt,
    kannst Du nun die Frage so machen.

    $startlimit="20040214000000";
    $endlimit="20040228235900";

    $query="SELECT * FROM Veranstaltungen WHERE (startdatum<=$endlimit) OR (enddatum>$startlimit)";

    Gruesse,

    Thomas

    1. Hallo,

      kleine Korrektur.

      $startlimit="20040214000000";
      $endlimit="20040228235900";

      Oops, Februar 2004 hat ja 29 Tage, und die letzte Minute
      hat natuerlich auch 59 Sekunden:
      $endlimit="20040229235959";

      $query="SELECT * FROM Veranstaltungen WHERE (startdatum<=$endlimit) OR (enddatum>$startlimit)";

      Um konsequent zu sein, sollte der Schluss heissen:
       OR (enddatum>=$startlimit)";

      Gruesse,

      Thomas