2016-07-17 9 views
0

Hier sind meine TabellenSuche Eigenschaften von Verfügbarkeit in fremder Tabelle mit MySQL

properties    bookings 
==========    ========== 
property_id    booking_id 
price     property_id 
city      checkin_date 
         checkout_date 

Ich habe zwei Tabellen, Eigenschaften und Buchungen für einen Verleih vor Ort. Ich möchte eine Suche nach Check-in-Datum, Check-out Datum, Preis und Ort. Es prüft die Verfügbarkeit von den ausländischen Tabellenbuchungen über die Property_id FK.

Grundsätzlich möchte ich es wie etwas sein:

SELECT property_id,price,city FROM properties 
WHERE 
price > 200, 
city = "Toronto", 
LEFT JOIN (
    SELECT postid, COUNT(*) AS total 
    FROM bookings 
    WHERE checkin_date *** SOMEHTING HERE **** 

ist schon falsch die oben Ich bin sicher. Ob ich linker Join oder innerer Join verwenden soll.

+0

Schließen Sie die Ergebnisse mit der 'where' Klausel ab. Vielleicht 'SELECT property_id, Preis, Stadt FROM Eigenschaften als p innere Join Buchungen als b auf b.property_id = p.property_id WHERE p.Preis> 200, p.city =" Toronto "' Wenn Sie nur allgemein über die fragen verschiedene Join-Typen siehe: http://stackoverflow.com/questions/5706437/whats-the-difference-between-inner-join-left-join-right-join-and-full-join Auch dies scheint nur eine mysql zu sein Frage. – chris85

+0

Oh, für das Datum hinzufügen und '? zwischen b.checkin_date und b.checkout_date' oder ähnlichem und binden Sie das Benutzerdatum. – chris85

+0

Ihr Join muss vor Ihrer where-Klausel stehen, und where-Klauseln müssen mit "AND" oder "OR" verknüpft sein, nicht mit Kommas. Warum versuchen Sie das nicht in einer echten Datenbank? – halfer

Antwort

0
SELECT DISTINCT p.property_id, p.price, p.city 
FROM properties AS p 
LEFT JOIN bookins AS b ON p.property_id = b.property_id 
WHERE p.price > 200 
AND p.city = 'Toronto' 
AND (b.checkin_date >= '?' OR b.checkout_date <= '?') 

ersetzen? mit Ihrem Suchdatum