2011-10-18 3 views
0

Avec cette requête, je vais trouver tous les appartements disponibles. Tous les appartements disponibles n'ont pas de numéro de réservation.Obtenir des appartements disponibles

Ce que je veux: Quand il a un numéro de réservation et le statut est annulé, je veux aussi l'appartement pour montrer, mais je ne sais pas comment ...

SELECT a.id, a.num_persons, a.rating, a.lat, a.lng, a.street, a.number 
     ,c.title, c.introduction, c.text, c.area, c.long_term_rental, c.beds 
     , c.features ,c.services_and_equipment, c.terms_and_conditions 
     , m.url 
    FROM appartments AS a 
    INNER JOIN appartments_content AS c on c.parent_id = a.id 
    INNER JOIN meta AS m on m.id = c.meta_id 
    LEFT JOIN appartments_bookings AS b 
      ON (b.appartment_id = a.id 
      AND NOT ((? > b.departure) OR (? < b.arrival)))  
     -- this ? = arrival  that ? = departure 
    WHERE b.id IS NULL 
     AND c.language = ? 
     AND a.hidden = ? 
     AND a.publish_on <= ? 
     AND a.city_id = ? 
     AND a.num_persons >= ? 

    ORDER BY a.num_persons ASC, a.publish_on DESC 
    LIMIT ? OFFSET ?' 

J'ajouté ceci:

AND b.status != ? OR NOT ((? >= b.departure) OR (? < b.arrival))) WHERE b.order_id IS NULL 

Mais cela ne fonctionne pas, je reçois des résultats de nog.

+0

Peut-être devriez-vous inclure les définitions des appartements, appartments_content et appartments_bookings dans votre question. – jan

+0

donner la structure des données, j'ai oublié mon globe de cristal à la maison aujourd'hui: P –

Répondre

0

Je ne sais pas la syntaxe mySQL, mais changer WHERE à la clause à quelque chose comme ...

OU (b.id IS NULL OR (b.id IS NOT NULL ET b.status = 'annulé')) ET c.language = etc etc

+0

Thats it, merci –

Questions connexes