2017-04-05 1 views
0

Pour un projet d'art, j'essaie de créer un site de commande. Le concept permet aux utilisateurs de réserver un max. de deux créneaux horaires avec chaque artiste. Il y a 12 slots par artiste, mais chaque slot avec une définition spécifique (donc chacun est unique). Les machines à sous ne sont disponibles que pour un temps très limité et, espérons-le, rapidement. Il y aura donc beaucoup de demandes dans un court laps de temps. Je dois m'assurer que chaque article/emplacement n'est offert qu'à un seul utilisateur à la fois et ne peut être réservé en double. Mon idée était de vérifier le (s) prochain (s) emplacement (s) non réservé (s) (status = "free") et de mettre à jour le statut de la ligne correspondante de la table dans status = "locked". en fait réserver l'emplacement, l'état est mis à jour « réservé ».MySQL - mettre à jour automatiquement la ligne après x secondes d'inactivité (définir l'heure d'expiration)

Si un utilisateur clique sur « cancel » Je peux libérer l'article en mettant à jour la ligne à l'état = « libre ».

Cependant, il est Je pensais qu'il pourrait y avoir un moyen de réinitialiser automatiquement le statut, par exemple 120 secondes après qu'il a été "verrouillé". "et montrer un compte à rebours aux utilisateurs. ance le facteur d'excitation.

Je ne pense pas qu'un travail cron fonctionnerait car j'ai besoin que l'ancre soit la dernière mise à jour de la ligne et non une date-heure spécifique.

J'ai regardé dans les événements MySQL mais j'ai compris que je ne pouvais pas manipuler les données de la table à laquelle elle est attachée.

J'apprécierais grandement des idées. Merci, Sam

Répondre

0
  1. dans votre base de votre table d'état ajouter un champ datetime.

  2. Quand quelqu'un vous verrouiller un slot également enregistrer l'heure actuelle à l'aide NOW()

  3. Quand quelqu'un consulte les emplacements que vous effectuez et la mise à jour et de libérer les fentes inactives

    Update slots 
    SET locked = false 
    WHERE `datetime`> NOW() - INTERVAL 15 MINUTE; 
    
    SELECT * 
    FROM slots 
    WHERE locked = false; 
    
+0

Wow. C'était rapide. Est-ce que je comprends bien, que "INTERVAL 15 MINUTE" est un paramètre que je peux changer en fonction de mes besoins? Et pouvez-vous expliquer, ce que vous entendez par "Quand quelqu'un consulte les créneaux"? Merci! – berlinaise

+0

probablement aussi besoin de filtrer sur un ID spécifique ou quelque chose aussi. – Augwa

+0

Oui, '15 minutes' peut être' 1 heure' Vérifiez [** ICI **] (https://dev.mysql.com/doc/refman/5.5/fr/date-and-time-functions.html) pour toutes les options. –