Je veux voir si un temps que j'ai lu à partir d'un chevaucheux DB avec un temps fourni par un utilisateur fourni par un utilisateur.
Ma base de données ressemble à ceci: p> mon code On dirait que ceci: p> si je saisis deux fois de chevauchement exprès, il n'échresse pas d'erreur. Qu'est-ce que je fais mal? P> p>
5 Réponses :
faisait juste quelque chose de semblable ... mais juste avec les temps ...
Deux périodes de temps P1 et P2 chevauchent si, et seulement si, au moins une de ces conditions contient:
p2.from <= p1.from <= p2.to code>) li>
- p2 commence entre le début et l'extrémité de P1 (
p1.from <= p2.from <= p1.to code>) li>
ol> Cela attrapera des périodes partiellement chevauchées ainsi que des périodes où l'on couvre complètement l'autre. L'une des périodes doit toujours commencer (ou mettre fin à) à l'intérieur de l'autre si elles se chevauchent. P>
donc $ Autre_meeting code> serait défini par: p> xxx < / Pré> Vous pouvez modifier les cas limites à des vérifications strictes << / code> si un événement peut commencer exactement à la même heure que les autres extrémités. P> P>
Cela semble fonctionner parfaitement. Je l'ai un peu changé pour permettre exactement les mêmes temps (je travaille avec des ingénieurs et préciser 14:01 au lieu de 14h00 semble être une infraction majeure). Baie Dankie (merci beaucoup à Afrikaans)
Je le résoudrais probablement avec quelque chose comme ceci:
Pourrait fonctionner, mais alors j'aurais aussi besoin de vérifier si la réunion ne se chevauchait pas complètement. Exemple: la réunion 1 commence. RÉUNION 2 Démarre, réunissant 2 extrémités, réunion 1 se termine. En regardant votre code, il ne reviendra pas faux dans ce cas ...
Vos conditions sont malheureusement fausses. Que se passe-t-il si $ départ est avant Meeting_Start et $ Terminer est après la réunion_end? Les parenthèses évalueront à false code> et que vous l'avez nié dans true code>! C'est également une approche assez étrange pour aller chercher toutes les réunions non contradictoires lorsque vous voulez vraiment savoir s'il y a des conflits ou non. Essayez de faire correspondre des réunions en conflit plutôt que d'utiliser compteur (*) code> et limite 1 code> pour accélérer un peu.
On dirait que je suis un peu fatigué, je vais le réécrire> ___ <
La réponse d'Emil Vikström est correcte, mais il y a un scénario nécessaire pour être pris en compte. de supposer que les temps sont triés par ordre croissant. Exemple ci-dessous:
Si vous considérez P1 comme l'heure de la base et que vous souhaitez vérifier P2, P3, P4 contre elle. P> Voici comment vous pouvez vérifier si l'un quelconque du temps se chevauche un autre ou non. p> p>
Comme, l'une des gammes de temps est un sous-ensemble d'une autre plage de temps. de
Donc, supposons que p1 {start_time, end_time} code> et p2 {start_time, end_time} code> se chevauchera lorsque l'une des opérations suivantes est vraie.
p>
true code> li>
true code> li>
true code> li>
ol>
Ma réponse résout déjà cela. Si P1 est un sous-ensemble complet de P2, ma première condition est vraie: P1 commencera dans P2.
Dans le cas où $ to est toujours plus tard que $ par rapport à nous pouvons utiliser cette solution plus courte
Votre code est vulnérable aux injections SQL. s'il vous plaît i> lire ceci: Stackoverflow.com/Questtions/601300/what-is-sql -Injection et passer aux requêtes paramétrées. L'ancien
mysql _ code> Les fonctions sont bientôt dépréciées, vous devez utiliser MySQLI à la place.Réservoirs pour l'aide. Cela n'a toutefois pas résolu mon problème.
@Darkranger: Pouvez-vous taper echo $ résultat avant tout en boucle et laissez-moi savoir ce que vous obtenez?