Domanda

Sto scrivendo uno script di competizione PHP per un sito dei membri che deve limitare le voci a una al giorno per membro. Finora ho il seguente codice 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 è l'ID competizione,
  • ce_sub_id è l'ID membro e
  • CTE_Date è un timbro DateTime MySQL per la voce.

È difficile per me testare da dove mi trovo ora e ho bisogno di trovare una soluzione, quindi spero che qualcuno possa dirmi se questo è limitato a una volta al giorno o una volta al 24 ore e indicami Direzione giusta se è quest'ultimo.

Tia :)

È stato utile?

Soluzione

Crea una chiave primaria composta dalla colonna USER_ID, CONTACT_ID e una data.

Per verificare se l'utente ha già inserito una voce:

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

Altri suggerimenti

Spero che qualcuno possa dirmi se questo è limitato a una volta al giorno o una volta al 24 ore

Sembra che siano 24 ore:

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)

Se hai bisogno di "domani", come in, stasera a un minuto dopo le 23:59, considera di abbattere le cose per un vero vecchio DATERisoluzione:

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)

Considerando le date anziché i momenti, il cutoff scadrà effettivamente a mezzanotte. Attenzione, però - sarai quindi in balia del tempo sul tuo server MySQL, che potrebbe differire dal tempo sul server delle applicazioni se si trovano su macchine diverse.

Non posso esserne sicuro senza testare, ma rischiare di indovinare che una volta ogni 24 ore.

Prova invece quanto segue:

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

Qui stai chiaramente confrontando due date, una dal tuo campo e l'altra dalla data corrente per l'uguaglianza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top