Pregunta

Estoy escribiendo un guión de competencia de PHP para un sitio de miembros que necesita restringir las entradas a uno por día por miembro. Hasta ahora tengo el siguiente código MySQL:

SELECT ce_id 
  FROM competition_entries 
 WHERE ce_c_id = '$c_id' 
       AND ce_sub_id = '$user_id' 
       AND cte_date >= SYSDATE() - INTERVAL 1 DAY
  • CE_C_ID es la ID de competencia,
  • ce_sub_id es la identificación del miembro y
  • CTE_DATE es un sello de DateTime de MySQL para la entrada.

Es difícil para mí probar desde donde estoy ahora y necesito encontrar una solución, así que espero que alguien pueda decirme si esto está restringiendo a una vez por día o una vez por 24 horas, y señalarme el Dirección correcta si es lo último.

Tia :)

¿Fue útil?

Solución

Cree una clave primaria compuesta por User_ID, Competition_ID y una columna de tipo de fecha.

Para verificar si el usuario ya ha colocado una entrada:

select count(*)
from competition_entries
where ce_c_id = '$c_id' 
    AND ce_sub_id = '$user_id' 
    AND cte_date = current_date()

Otros consejos

Espero que alguien pueda decirme si esto se está restringiendo a una vez por día o una vez por 24 horas.

Parece que son 24 horas:

mysql> select sysdate(), sysdate() + interval 1 day;
+---------------------+----------------------------+
| sysdate()           | sysdate() + interval 1 day |
+---------------------+----------------------------+
| 2011-03-21 15:50:56 | 2011-03-22 15:50:56        | 
+---------------------+----------------------------+
1 row in set (0.01 sec)

Si necesita "mañana", como en, esta noche a un minuto después de las 23:59, considere morder las cosas a la vieja DATEResolución:

mysql> select DATE(sysdate()), DATE(sysdate()) + interval 1 day;
+-----------------+----------------------------------+
| DATE(sysdate()) | DATE(sysdate()) + interval 1 day |
+-----------------+----------------------------------+
| 2011-03-21      | 2011-03-22                       | 
+-----------------+----------------------------------+
1 row in set (0.00 sec)

Simplemente considerando las fechas en lugar de los tiempos, su límite expirará efectivamente a la medianoche. Sin embargo, ten cuidado: luego estará a merced de la hora en su servidor MySQL, que podría diferir de la hora en su servidor de aplicaciones si están en diferentes máquinas.

No puedo estar seguro sin pruebas, pero supongo que es una vez cada 24h.

Pruebe lo siguiente en su lugar:

SELECT ce_id FROM competition_entries WHERE ce_c_id = '$c_id' AND ce_sub_id = '$user_id' AND DATE(cte_date) == DATE(SYSDATE())

Aquí está comparando claramente dos fechas, una de su campo y la otra desde la fecha actual de igualdad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top