hello,
je reviens à nouveau vers vous pour voir quelle serait la meilleure approche pour filtrer mes résultats sur des dates "à la SQL".
en fait, mon implémentation concerne un système de location d'appartements.
lors d'une recherche de location, l'internaute décide d'une période : date de début, date de fin et je dois donc, parmi tous mes appartements, ne lui proposer que ceux qui sont disponibles entre ces deux dates.
en sql, je fais une requête à base de "no exists", pour vérifier pour chaque date déjà bloquées, si elles sont incluses, à cheval ou en dehors de la période considérée par la recherche de dispo :
SELECT Apartment.id
FROM apartments AS Apartment
WHERE Apartment.is_online = 1
AND NOT EXISTS (
SELECT 1
FROM periods as Period
WHERE Period.apartment_id = Apartment.id
AND (
Period.start_date BETWEEN '{$start_date}' AND '{$end_date}'
OR Period.end_date BETWEEN '{$start_date}' AND '{$end_date}'
OR (
Period.start_date < '{$start_date}'
AND Period.end_date > '{$end_date}'
)
)
)
dans mon index, j'ai stocké bien sûr les dates déjà bloquées pour chaque appartement, sous la forme d'objet avec start_date et end_date.
est-ce que je dois appliquer le même genre de requêtes qu'en sql, avec plusieurs filtres AND/OR ou bien y a-t-il une autre méthode plus propre ?
sachant bien entendu, que j'ai des facettes à afficher et que donc les dates ne sont pas les seuls filtres appliqués....
j'ai pensé à l'utilisation des scripts en ES, mais j'avoue que c'est très obscur pour moi...
Par avance, merci à ceux qui pourront m'aiguiller.