-1
votes

Compter les cours qui se passent dans une pièce qui passent actuellement la pièce, l'heure de début, l'heure de fin, la date

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) 
    );


1 commentaires

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


3 Réponses :


1
votes

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
      );


3 commentaires

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.



0
votes
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.

0 commentaires

1
votes

Je pense que vous recherchez quelque chose comme ceci: xxx

ou xxx

vérifier le résultat sur SQL Fiddle


0 commentaires