Ceci est ma requête de demande:
SELECT
COUNT(shedule_line.id) AS total_available
FROM
shedule_line
WHERE
shedule_line.salle_id = :salle AND
shedule_line.date = :date AND
(
(shedule_line.start_at < :start_at AND shedule_line.end_at > :end_at) OR
(shedule_line.start_at > :start_at AND shedule_line.end_at < :end_at) OR
(shedule_line.start_at < :end_at)
);
3 Réponses :
Je pense que la logique que vous voulez est la suivante:
SELECT COUNT(sl.id) AS total_in_use
FROM shedule_line sl
WHERE sl.salle_id = :salle AND
sl.date = :date AND
(sl.start_at < :end_at AND
sl.end_at > :start_at
);
Cela ne couvre donc pas tout cas: par exemple: prendre en compte les données sur la photo, si j'ai essayé avec des données telles que ceci: Chambre = 2, start_at = 10: 00: 00, find_at = 20: 00: 00, date = 2020-02-10, je dois recevoir 2 comme total, mais avec la demande actuelle, je reçois 0
@insantech. . . Cela devrait compter deux chevauchements pour la situation que vous décrivez.
@insantech. . . Cela a toujours travaillé. Je n'ai pas changé la réponse.
SELECT COUNT(shedule_line.id) AS total_available
FROM shedule_line
WHERE shedule_line.salle_id = :salle AND shedule_line.date = :date
AND (
shedule_line.start_at < CAST(:end_at as time)
AND shedule_line.end_at > CAST(:start_at as time)
)OR
(
shedule_line.start_at > CAST(:end_at as time)
AND shedule_line.end_at > CAST(:start_at as time)
);
Finally I found this solution which works well. Thank you all.
Je pense que vous recherchez quelque chose comme ceci: ou stry> p> vérifier le résultat sur SQL Fiddle P> P>
Avec cette requête, je ne reçois pas les résultats que je veux. J'ai besoin d'aide s'il vous plait. Par exemple: Prendre en compte les données sur la photo, si j'ai essayé avec des données telles que ceci: Chambre (salle_id) = 2, start_at = 10: 00: 00, find_at = 20: 00: 00, date = 2020-02-10 , Je dois recevoir 2 comme total_available, mais avec la demande actuelle, je reçois 0