MySQL filtern einer tabelle gegen eine andere tabelle
Ilja
- datenbank
0 Daniela Koller0 Ilja
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
Hi Ilja
SELECT u.id, u.bedrooms, u.capacity
FROM units AS u
WHERE
bedrooms >= $bedrooms AND
capacity >=$personsaber 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
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