2013-02-09 4 views
0

J'ai essentiellement deux groupes de tables. 'props_' et 'avail_'. Chacun avec env. 4 tables que j'ai jointes en utilisant UNION ALL.MySQL Select JOIN plusieurs tables

Je dois sélectionner les propriétés avec l'emplacement nécessaire & dort qui n'apparaissent pas dans les tables de disponibilité pour des plages de dates spécifiques.

property tables... 'props_01', 'props_02', 'props_03', 'props_04' 
    id code   location sleeps 
    1  7A06E91875 devon  2 
    2  440ac2664c cornwall 4 
    5  0474d4882b devon  2 


availability tables... 'avail_01', 'avail_02', 'avail_03', 'avail_04' 
    id prop_code  date 
    1  440ac2664c 20130208 
    2  440ac2664c 20130209 
    3  440ac2664c 20130210 
    4  440ac2664c 20130211 
    5  440ac2664c 20130212 

Ces tables de disponibilité contiennent toutes les dates réservées. Je souhaite donc sélectionner uniquement dans les tables de propriétés où elles n'ont pas d'enregistrement de disponibilité pour la plage de dates spécifiée. Voici comment je cherchais à le faire interroger ...

(avail.date != '20130209' AND avail.date != '20130210' AND avail.date != '20130211' AND avail.date != '20130212' AND avail.date != '20130213') OR (avail.date != '20130210' AND avail.date != '20130211' AND avail.date != '20130212' AND avail.date != '20130213' AND avail.date != '20130214') 

Je dois également appliquer des filtres aux tables de propriétés pour l'emplacement et sommeils.

La requête que j'ai fait tout ce qui à part, y compris le est ci-dessous disponibilité, cela fonctionne très bien, mais je ne sais pas la meilleure façon de le modifier pour interroger également les tables de disponibilité ...

SELECT prop.* FROM (SELECT * FROM `props_01` UNION ALL SELECT * FROM `props_02` UNION ALL SELECT * FROM `props_03` UNION ALL SELECT * FROM `props_04`) prop WHERE prop.location='Devon' AND prop.sleeps>='4' ORDER BY prop.sleeps ASC 
+0

Pourquoi des groupes de tables? Pourquoi pas une table pour les propriétés et une pour la disponibilité? – Strawberry

+0

parce qu'im utilisant différentes sources veulent donc avoir une table distincte pour chaque source, également même pour la disponibilité. Je voulais utiliser des tables séparées pour chaque source parce que ma recherche avancée permettrait aux gens de choisir la source, donc je pensais que ce serait plus rapide car je ne peux interroger qu'une table pour chaque table de disponibilité pour un groupe de propriétés de plus de 150k records –

+0

Qu'est-ce qu'une 'source'? – Strawberry

Répondre

0

Pour vous joindre à 3 tables Table1, Table2 Table3

SELECT * DE GAUCHE table1 REJOIGNEZ table2 SUR table1.id = table2. id LEFT JOIN table3 sur table2.id = table3.id;