Estoy escribiendo un script que necesita reservar asientos en el cine.Bloquear filas en una tabla para SELECCIONAR y ACTUALIZAR
- de usuario le pide 2 plazas
- Si hay 2 asientos disponibles, el sistema les ofrece a clientes
- cliente puede aceptar o solicitar otros 2 asientos.
- Cuando finalmente acepta, los asientos están marcados como "vendidos"
Puesto que puede haber varios usuarios que utilizan el sistema al mismo tiempo, necesito una manera de "bloquear" las filas se ofrecen a los clientes actuales hasta que pase cierto tiempo, o él solicita otros asientos.
Actualmente estoy marcando asientos ofrecidos como "bloqueado" con un ID de cliente, y el uso de SELECT para devolverlos al cliente (esto es para MySQL, pero la base de datos de destino es Postgres)
UPDATE seats SET status = "locked", lock_time = NOW(), lock_id = "lock1" LIMIT 2
SELECT * FROM seats WHERE lock_id = "lock1" AND lock_time > DATE_SUB(NOW(), INTERVAL 2 MINUTE)
Hay una problema con eso: si solo hay 1 asiento disponible, seguirá marcado como "bloqueado" y tendré que soltar el bloqueo de inmediato.
También estoy bastante seguro de que hay una manera más inteligente de hacerlo. ¿Cuál es la forma correcta de lidiar con una tarea como esa?
Gracias, decidieron ir con su solución. Tuve que modificar la consulta un poco, pero funciona como se esperaba –