Ilja: MySQL filtern einer tabelle gegen eine andere tabelle

tach zusammen,

ich habe zwei tabellen. in der ersten tablle stehen meine units (appartments) mit vier spalten id, name, bedrooms, capacity. die zweite tabelle soll die zeiten festhalten, wann die units belegt sind. sie hat vier spalten id, id_unit, start_date, end_date, wobei id_unit der schlüssel auf die erste tabelle ist.
ich habe nun folgende vorgaben und zwar eine minimum angabe der bedrooms und capacity, ein start date und ein end date alles in variablen gespeichert.
ich will nun eine liste mit allen units (appartments) ausgeben, die mit den erforderlichen bedrooms und capacity zu dem angegeben zeitraum frei sind, sprich alle units auschliessen, die zu diesem zeitpunkt belegt sind.
die mysql version ist unter 4.x und ich bekomme das nicht so richtig hin, die belegten units mit einer abfrage auszuschliessen. die abfrage auf die bedrooms und capacity einzugrenzen, ist noch recht einfach.

SELECT u.id, u.bedrooms, u.capacity
FROM units AS u
WHERE
bedrooms >= $bedrooms AND
capacity >=$persons

aber immer, wenn ich die andere tabelle mit ins spiel bringen will, komme ich nicht so richtig auf die richtige idee. left joins, inner joins beides versucht, beides nicht hinbekommen.
Oder grundsätzlich wie filtere ich eine tabelle indem ich die resultate einer zweiten tabelle ausschliesse ohne nested queries

Ilja

  1. Hi Ilja

    SELECT u.id, u.bedrooms, u.capacity
    FROM units AS u
    WHERE
    bedrooms >= $bedrooms AND
    capacity >=$persons

    aber immer, wenn ich die andere tabelle mit ins spiel bringen will, komme ich nicht so richtig auf die richtige idee. left joins, inner joins beides versucht, beides nicht hinbekommen.

    LEFT OUTER JOINS waren durchaus die richtige Idee, allerdings dachte ich, du hättest das ganze jetzt anders gelöst, ist ja schliesslich das selbe wie vor einer guten Woche.

    Die Idee ist, du holst dir alles was belegt ist dazu und
    alles wo es nicht belegt ist, kriegst du NULL in der ID-Spalte aus Tabelle b, alles was da NULL hat, ist jetzt dein Freund.

    SELECT u.id, u.bedrooms, u.capacity
      FROM units AS u
        LEFT OUTER JOINS tab2 AS b
             ON (id = id
                 AND bedingungen_fuer_gerade_belegt)
      WHERE bedrooms >= $bedrooms
        AND capacity >=$persons
        AND ISNULL idspalte_aus_tab_b

    Wie das isnull ganz genau heisst in MySQL hab ich vergessen, musst du eben nachschlagen wenns nicht klappt.

    Gruss Daniela

    --
    Nein, wir frieren unsere Hühner nicht auf Gletschern fest.
    Selfcode: sh:) fo:) ch:) rl:) br:> n4:| ie:{ mo:) va:) de:] zu:} fl:( ss:) ls:&
    1. hi Daniela,

      ich habe mal deine struktur genommen und eingesetzt. das IS NULL muste von der syntax her nach hinten und dann hat es geklappt. ich hatte ein wenig schwierigkeiten, wo genau ich das kriterium mit dem datum hinpacke. ohne das datum nach null werten suchen, das war mit meinen männlichen gehirnwendungen noch möglich, aber dann....

      ich habe noch nicht viele daten drinne, kann also noch nicht genau sagen, ob es geht, aber sieht ganz gut aus. wenn nicht, schrei ich noch mal....

      vielen dank
      Ilja