Sebastian: Komplizierte select abfrage

Hallo erat mal,
ich hoffe hier kann mir jemand weiter helfen.

Ich hab in meiner DB (mySQL) eine Tabelle, in der ereignisse abgespeichert sind. also z.B.:

datum        ereignis
31.12.2003   Silvesterparty bei Uwe
02.01.2004   Geburstag Papa

jetzt möchte ich eine select-Abfrage machen, die sowohl die Ereignisse ausgibt aber auch die Tage an denen halt nichts ist.
z.B.:

...
31.12.2003   Silvesterparty
01.01.2004
02.01.2004   Geburtstag Papa
03.01.2004
...

Die Datumsangaben abzuspeichen an denen nichts ist kann doch wohl keine Lösung sein.

Ist das überhaupt möglich???

Danke für jede Antwort
Sebastian

  1. Sup!

    Du willst also aus der Datenbank Dinge bekommen, die gar nicht drin sind?

    Gruesse,

    Bio

    --
    SSDSGPS!
  2. Servus,

    wo ist das Problem?

    Select Datum, EREIGNIS from Tabelle.

    Je nachdem ob du nun selektieen möchtest, ob was los ist oder nicht hilft eventuell noch folgendes.

    Select Datum, EREIGNIS from Tabelle where EREIGNISE not NULL

    Sollte dir alle Einträge liefern, wo das Ereignis nicht leer ist.
    Spalten mit keinem Wert zu versehen ist durchaus möglich, sofern es nicht explizit der Spalte untersagt wird.
    das gibt man wiederum beim erstellen der Tabelle an.

    Gruss Matze

  3. yo,

    jetzt möchte ich eine select-Abfrage machen, die sowohl die Ereignisse ausgibt aber auch die Tage an denen halt nichts ist.

    SELECT datum, ereignis FROM tabellename ORDER BY datum;

    Ilja

    1. SELECT datum, ereignis FROM tabellename ORDER BY datum;

      err falsche antwort. habe nicht genau gesehen, dass nicht jedes datum in der tabelle eingetragen ist. ;-)

      aber das was du vor hast, ist ein left join, wobei du die zweite tabelle noch erstellen mußt, physikalisch oder aber temporär.

      Ilja

  4. hi,

    Die Datumsangaben abzuspeichen an denen nichts ist kann doch wohl keine Lösung sein.

    gut erkannt. aber von der DB daten erfragen zu wollen, die diese gar nicht bereithält, ist ebenso unsinnig.

    mache deine abfrage so, dass sie dir alle daten, an denen ein ereignis stattfindet, zurückliefert.

    mache anschliessend in deinem script (php, perl, ...) eine schleife, die den gesammten in frage stehenden zeitraum durchläuft, und wenn ein zum datum passender datensatz im abfrage-ergebnis vorliegt, diesen ausgibt, andernfalls nur das datum und "heute nix los!" ausgibt.

    pseudocode:

    hole ersten datensatz aus abfrageergebnis.

    schleife über zeitraum
    {
      if (zeitraum-zähler == datum-aus-aktuellem-datensatz)
      {
         gebe datensatz aus
         hole nächsten datensatz aus abfrageergebnis
      }
      else
      {
        gebe zeitraum-zähler und "heute nix los" aus
      }

    erhöhe zeitraum-zähler (je nach schleifen-typ, bei for nicht erforderlich)
    }

    ist nur schnell hingetippt, evtl. noch verbesserungswürdig/-bedürftig.

    gruss,
    wahsaga