Mailinglisten-Archive |
Hermann Kuffner wrote: > Hallo Liste, > > ich komm mit einem select einfach nicht weiter (trotz Handbuch wälzen!): > ich habe 3 tabellen: 'schulen', 'raeume', 'belegungen' > verknüpft sind die 3 folgendermassen: > schulen.sid => raeume.sid > raeume.rid => belegung.rid > > Jetzt brauche ich den select für z. B. folgende Anfrage: > > "Zeig mir alle Schulen mit Bushaltestelle im Raum Köln, UND deren Zimmer > (die über Streamer und Overheadproj. verfügen müssen und vom 01.08.03 bis > 05.08.03 nicht belegt sind." > > Logischerweise hat jede Schule viele Zimmer und jedes Zimmer viele > Belegungen. > Ich habe folgendes versucht (mit falschem Ergebnis :-(): > > select schulen.sid, schulen.name, schulen.ort, raeume.nr > from schulen, raeume, belegungen > where belegungen.start not between '2003-08-01' and '2003-08-03' > and belegungen.stop not between '2003-08-01' and '2003-08-03' > and raeume.rid = belegungen.rid > and raeume.streamer = '1' > and raeume.ohp = '1' > and schulen.sid = raeume.sid > and schulen.region = 'koeln' > and schulen.verkehr = 'bh' > group by schulen.sid > order by schulen.ort asc, schulen.name asc, raeume.nr asc du solltest die tabelle an erste stelle stellen welche von vornherien die wenigsten treffer bringt, da so mysql gleich am anfang viel ausschließen kann, was die geschwindigkeit erhöht außerdem verträgt sich dein 'GROUP BY schulen.sid' nicht mit deinem 'select schulen.sid, schulen.name, schulen.ort, raeume.nr' wegen dem 'raeume.nr' entweder SELECT schulen.sid, schulen.name, schulen.ort ... GROUP BY schulen.sid oder SELECT schulen.sid, schulen.name, schulen.ort, raeume.nr .. ohne group by aber du willst ja die schulen, nicht die räume, hast du geschrieben, also: SELECT schulen.sid, schulen.name, schulen.ort FROM raeume LEFT JOIN belegungen ON raeume.rid = belegungen.rid LEFT JOIN schulen ON raume.sid = schulen.sid WHERE belegungen.start NOT BETWEEN '2003-08-01' AND '2003-08-03' AND belegungen.stop NOT BETWEEN '2003-08-01' AND '2003-08-03' AND raeume.streamer = '1' AND raeume.ohp = '1' AND schulen.region = 'koeln' AND schulen.verkehr = 'bh' GROUP BY schulen.sid ORDER BY schulen.ort ASC, schulen.name ASC > > Sollte ich einen join verwenden? Ich bin ziemlich neu mit MySQL und die > Joins sind mir noch nicht so klar, aber diese Such dauert ziemlich lang und, > wie gesagt, das Ergebnis ist's leider auch nicht :-((. > > Wäre super, wenn mir jemand helfen würde. > > Danke > Hermann > -- Sebastian Mendel www.sebastianmendel.de www.tekkno4u.de www.nofetish.com -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive