controlar multiples usuarios de manera correcta?

Iniciado por t4r0x, 22 Agosto 2016, 06:36 AM

0 Miembros y 1 Visitante están viendo este tema.

t4r0x

Buenas mi escenario es este, tengo una pagina donde debo controlar el acceso de multiples usuarios/sesiones a la vez, ellos verificarian si hay un "cupo" disponible si lo hay entonces recuperan un ese valor del cupo de la base de datos MySQL, esta verificacion deberia hacerme de manera que no haya conflico entre los usuarios a la hora de verificar. algo como esto:

tabla:

------------------------------
Id   |  CupoEsDisponible
------------------------------
1    |            1
2    |            1
3    |            1
4    |            1
5    |            1
------------------------------
El 1 en CupoEsDisponible indica que el cupo es disponible. el codigo:

Código (php) [Seleccionar]

// por aqui llegan todos los usuarios/sesiones



Begintransaction()

aqui el usuario verifica si hay cupo disponible ( si "CupoEsDisponible" es igual a 1 sino retornaria FALSE ).
aqui todas las demas sesiones se detienen a esperan que la primera termine. y el problema es ese, las demas sesiones quedan esperando ya que todas acceden a la misma fila con Id = 1 pudiendo recuperar la fila 2 o 3, 4, 5 que estan disponibles asi que como hago para prevenir que no esperen y que busquen por otra fila?
if(Query("SELECT * FROM Tabla_cupos_para_usuarios WHERE CupoEsDisponible = 1 LOCK IN SHARE MODE") != FALSE)
{
     el cupo es disponible asi que lo establecemos como no disponible ( igual a 0 )
     execute("UPDATE Tabla_cupos_para_usuarios SET CupoEsDisponible = 0 WHERE Id = Id_que_obtuvimos_de_Query");
     
     mas codigo...
}

Commit()