Bonjour.
Il manque quelque chose dans votre requête : la condition de jointure.
INNER JOIN planning AS p ON l.localId = p.localId
Mais il faudrait en plus de cela chercher dans la table planning tous les locaux non utilisés, ayant le nombre de places minimales requises, pendant cette tranche horaire (c-à-d entre 8:30 et 9:30 pour l'exemple repris)
Normalement, un local ne figurant pas dans le planning est un local non utilisé.
On peut donc déjà chercher ceux-là :
1 2 3 4 5 6 7 8 9
| SELECT *
FROM locaux AS l
WHERE l.places >= 30
AND NOT EXISTS (
SELECT *
FROM planning AS p
WHERE l.localId = p.localId
)
ORDER by l.nom ASC |
Tes colonnes start et end sont horodatées donc l'heure est insuffisante dans le critère de recherche, il faut aussi préciser la date.
Quels sont les locaux utilisés le 18/08/2009 entre 8h30 et 9h30 ?
- ceux dont le start est compris le 18/08/2009 entre 8h30 et 9h30 ;
- ceux dont le end est compris le 18/08/2009 entre 8h30 et 9h30.
Il suffit de les exclure de la même manière.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| SELECT *
FROM locaux AS l
WHERE l.places >= 30
AND NOT EXISTS (
SELECT *
FROM planning AS p
WHERE l.localId = p.localId
AND (
p.start BETWEEN '2009-08-18 08:30:00' AND '2009-08-18 09:30:00'
OR
p.end BETWEEN '2009-08-18 08:30:00' AND '2009-08-18 09:30:00'
)
)
ORDER by l.nom ASC |
Partager