2010-07-13 14 views
7

Saluti a tutti. Newbie qui. Domanda sulla prevenzione di voci duplicate nel mio semplice modulo web.Creazione della chiave univoca nella tabella MySQL riferita alla data

La mia tabella registra l'input dell'utente da un modulo Web e si distingue per data, ad es. DATA(). Come impedire all'utente con lo stesso nome di immettere informazioni due volte in una singola data, ad es. lo stesso nome utente non può essere inserito due volte nella stessa data, ma può essere inserito in un'altra data?

Spero che qualcuno mi possa consigliare su questo. Grazie è anticipo

risposta

9

vostra tabella dovrebbe avere questi:

create table tablename (
... 
user_id bigint, -- or whatever 
date_created date, 
unique key(user_id, date_created) 
... 
); 
+0

Grazie per tutti i consigli :) Provato come suggerito, impedirà lo stesso ingresso dalla stessa data. Ma quando cambio la data alla prossima data, mostrerà 'nome duplicato' impossibile inserire il record. Come si può inserire nuovamente lo stesso NOME nell'altro DATE? – cys

+0

Forse hai anche una chiave univoca solo sul nome? Esegui: 'show create table tablename' e pubblica i risultati. – ceteras

+0

Grazie ragazzi, riesco a farlo funzionare. Inserisco un'istruzione if..else per convalidare se una qualsiasi riga con DATE e NAME è uguale, quindi non eseguire l'inserimento del record, altrimenti inserire il record. Ho avuto questa idea da tutti voi che rendere NAME e DATE unici. Grazie! :) – cys

1

È semplice possibile creare una chiave primaria composta. Per il tuo caso, ciò significa che la tua chiave primaria deve essere composta da un campo data e dal campo username.

+1

Anche questo è possibile. Ma i PK compositi sono problematici quando si creano relazioni con questa tabella. Penso che l'indice UNIQUE sia un approccio migliore. –

+0

Sono d'accordo! Tuttavia, voglio solo sottolineare che l'opzione "NOT NULL" per i campi univoci è richiesta (come hai fatto nel tuo codice di creazione della tabella), poiché un valore NULL per nome o data distrugge l'unicità (cioè è possibile aggiungere il utente 'xxx' più volte se la data è NULL). – Javaguru

1

In diversi modi.

Innanzitutto, è possibile creare l'indice sul proprio tavolo. (Sto usando la tabella semplice come esempio).

CREATE TABLE `test` (
`id` INT NOT NULL , 
`name` VARCHAR(255) NOT NULL , 
`date` DATE NOT NULL , 
PRIMARY KEY (`id`) 
) ENGINE = MYISAM; 

ALTER TABLE `test` ADD UNIQUE (
`name` , 
`date` 
); 

Questo è il modo MySQL.

Si dovrebbero anche eseguire controlli in PHP, anche se è possibile farlo durante l'inserimento (MySQL restituirà un errore e sarà possibile controllarlo). Ma puoi fare SELECT addizionale prima di inserire (SELECT * from test WHERE name=USER AND date=DATE) e controllare il conteggio dei record. Se è più di 0, si mostra l'errore.

Durante il salvataggio, raramente dovresti preoccuparti di un ulteriore SQL. Se è il caso, basta controllare la dichiarazione di MySQL per gli errori (modo MySQL :)).

Problemi correlati