2012-12-24 1 views
1

J'essaie de créer une application pour l'iPhone où vous pouvez définir des rendez-vous. Tout est enregistré dans une base de données MySQL et je reçois actuellement les données via JSON dans mon application. Ceci est un flux de travailCréer des rendez-vous et détecter des collisions avec l'iPhone

  1. User1 définit quand il travaille. Par exemple. 8h - 16h.
  2. User2 veut avoir un rendez-vous avec user1, par ex. 8 heures-9 heures.

Lorsqu'il n'y a aucun rendez-vous existant, il peut être sauvegardé. S'il y en a déjà un, par ex. 8h15 - 8h45, une erreur s'affichera.

Pouvez-vous s'il vous plaît me donner un indice comment faire cela? Je pensais à une classe avec NSDate "startDate" et "endDate", mais je ne sais pas comment détecter ces collisions de rendez-vous.

Merci beaucoup, chaque indice est apprécié.

+0

Vous voulez vérifier s'il y a un rendez-vous entre 8h00 et 9h00? –

Répondre

0

La nomination est valide ssi les conditions suivantes sont réunies:

  • la nomination est dans les heures de travail de l'utilisateur; et

  • ne pas en conflit avec un rendez-vous existant, ce qui peut arriver de trois manières possibles:

    • la nomination retentissante commence au cours de la nouvelle nomination; et/ou

    • le rendez-vous en conflit se termine pendant le nouveau rendez-vous; ou

    • le rendez-vous en conflit commence avant et se termine après le nouveau rendez-vous.

Vous pouvez interroger pour cela dans SQL pur avec quelque chose le long des lignes suivantes:

SELECT EXISTS (
    SELECT * 
    FROM appointments a JOIN workhours h USING (user_id) 
    WHERE user_id = 1 
    AND h.start <= '08:00:00' AND h.end >= '09:00:00' 
    AND (
       a.start BETWEEN '08:00:00' AND '09:00:00' 
      OR a.end BETWEEN '08:00:00' AND '09:00:00' 
      OR (a.start < '08:00:00' AND a.end > '09:00:00') 
     ) 
    LIMIT 1 
) 

Attention pour effectuer cette SELECT en utilisant une lecture verrouillage dans une transaction afin d'éviter la concurrence problèmes.

+0

Merci pour votre réponse. Pourquoi utilisez-vous l'id_utilisateur pour rejoindre les tables? Utilisateur1 devrait être en mesure de prendre rendez-vous avec user2. Je ne sais pas si ça marche comme ça. Pouvez-vous aider? – doonot

Questions connexes