10
votes

Vérifiez si deux fois se chevauchent

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: xxx

mon code On dirait que ceci: xxx

si je saisis deux fois de chevauchement exprès, il n'échresse pas d'erreur. Qu'est-ce que je fais mal?


3 commentaires

Votre code est vulnérable aux injections SQL. s'il vous plaît lire ceci: Stackoverflow.com/Questtions/601300/what-is-sql -Injection et passer aux requêtes paramétrées. L'ancien mysql _ 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?


5 Réponses :


3
votes

faisait juste quelque chose de semblable ... mais juste avec les temps ... XXX


0 commentaires

31
votes

Deux périodes de temps P1 et P2 chevauchent si, et seulement si, au moins une de ces conditions contient:

  1. p1 commence entre le début et l'extrémité de P2 ( p2.from <= p1.from <= p2.to )
  2. p2 commence entre le début et l'extrémité de P1 ( p1.from <= p2.from <= p1.to )

    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.

    donc $ Autre_meeting serait défini par: 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.


1 commentaires

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)



2
votes

Je le résoudrais probablement avec quelque chose comme ceci: xxx


3 commentaires

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 et que vous l'avez nié dans true ! 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 (*) et limite 1 pour accélérer un peu.


On dirait que je suis un peu fatigué, je vais le réécrire> ___ <



0
votes

La réponse d'Emil Vikström est correcte, mais il y a un scénario nécessaire pour être pris en compte. de
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} et p2 {start_time, end_time} se chevauchera lorsque l'une des opérations suivantes est vraie.

  • p1.start_time <= p2.start_time <= p1.end_time
  • p1.start_time <= p2.end_time <= p1.end_time
  • p2.start_time <= p1.start_time <= p1.end_time <= p2.end_time

    supposer que les temps sont triés par ordre croissant. Exemple ci-dessous:
    xxx

    Si vous considérez P1 comme l'heure de la base et que vous souhaitez vérifier P2, P3, P4 contre elle.

    1. p1.start_time <= p2.start_time <= p1.end_time true
    2. p1.start_time <= p3.end_time <= p1.end_time true
    3. p4.start_time <= p1.start_time <= p1.end_time <= p4.end_time true

      Voici comment vous pouvez vérifier si l'un quelconque du temps se chevauche un autre ou non.


1 commentaires

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.



0
votes

Dans le cas où $ to est toujours plus tard que $ par rapport à nous pouvons utiliser cette solution plus courte xxx


0 commentaires