Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [MySQL] Prevenire inserimenti duplicati

    Devo inserire dei valori in una tabella, evitando che venga inserito piu volte.

    codice:
    +-------------+--------+-----------+-----------+
    | idbattaglia | idclan | punteggio | timestamp | 
    +-------------+--------+-----------+-----------+
    Al termine di una battaglia i giocatori di un clan inviano simultaneamente il punteggio. Quello che vorrei fare e' che il punteggio venga inserito solo una volta, magari verificando che non sia gia stato inserito nei precedenti 15 secondi dagli altri.

    Che modo di farlo con solo mysql?
    Con php la mia paura che la cosa avvenga cosi rapidamente che venga inserito un duplicato.
    tra il controllo e l'inserimento.
    Il Cavaliere dei Sogni

  2. #2
    Non puoi usare una chiave univoca sulla coppia idbattaglia idclan?

  3. #3
    Originariamente inviato da chumkiu
    Non puoi usare una chiave univoca sulla coppia idbattaglia idclan?
    pensavo di non aggiornare il punteggio, ma ogni volta inserire un nuovo record con un nuovo punto fatto e metterci a fianco il timestamp.
    Vorrei prevenire che il punto fatto venga inviato piu volte da piu giocatori.
    Il Cavaliere dei Sogni

  4. #4
    Originariamente inviato da narghat
    pensavo di non aggiornare il punteggio, ma ogni volta inserire un nuovo record con un nuovo punto fatto e metterci a fianco il timestamp.
    Vorrei prevenire che il punto fatto venga inviato piu volte da piu giocatori.
    Allora temo dovrai aggiungere anche il campo id giocatore. E' l'unico modo sicuro per mantenere e salvare l'informazione.

  5. #5
    Ce l'ho fatta!!!!!!!

    codice:
    INSERT INTO battaglia_punti(idbattaglia,idclan,punteggio,time_stamp)
    
    SELECT idbattaglia,idclan,1,now()
    FROM battaglia_punti 
    WHERE idclan=1 AND idbattaglia=20 
    AND (SELECT max(time_stamp) FROM battaglia_punti WHERE idclan=1 AND idbattaglia=20) 
    <DATE_SUB(now(), INTERVAL 15 second)
    ORDER BY time_stamp DESC LIMIT 1

    Usando INSERT SELECT

    Fa due sotto query con select.
    Nella prima restuisce i risultati da mettere nell'insert.
    Nella seconda seleziona il timestamp piu recente max(time_stamp)
    e poi viene usato quello per verificare che sia piu vecchio di 15 secondi
    Il Cavaliere dei Sogni

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.