2010-07-13 39 views
7

Saludos a todos. Novato aquí. Pregunta sobre la prevención de la entrada duplicada en mi formulario web simple.Creación de clave única en la tabla MySQL referente a la fecha

Mi tabla registra la entrada del usuario desde un formulario web, y se distingue por fecha, p. FECHA(). Cómo evitar que un usuario con el mismo nombre ingrese información dos veces en una sola fecha, p. el mismo nombre de usuario no se puede ingresar dos veces en la misma fecha, pero se puede ingresar en otra fecha?

Espero que alguien me pueda aconsejar sobre esto. Gracias es avance.

Respuesta

9

Su tabla debe tener los siguientes:

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

Gracias por todos los consejos :) Probado como se sugiere, evitará la misma entrada desde la misma fecha. Pero cuando cambio la fecha a la siguiente, mostrará 'nombre duplicado' incapaz de ingresar el registro. ¿Cómo hacer que el mismo NAME pueda ingresarse nuevamente en la otra FECHA? – cys

+0

Quizás también tenga una clave única en el nombre solo. Ejecute esto: 'show create table tablename' y publique los resultados. – ceteras

+0

Gracias chicos, me las arreglo para que funcione. Puse en una declaración if..else para validar si alguna de la fila con DATE y NAME es la misma, entonces no ejecuto enter record, else, ingrese record. Tengo esta idea de todos ustedes que hace que NAME y DATE sean únicos. ¡Gracias! :) – cys

1

Puede crear una sencilla clave primaria compuesta. Para su caso, esto significa que su clave principal debe constar de un campo de fecha y de un campo de nombre de usuario.

+1

Esto también es posible. Pero los PK compuestos son problemáticos al crear relaciones con esta tabla. Creo que el índice ÚNICO es un mejor enfoque. –

+0

¡Estoy de acuerdo! Sin embargo, solo quiero señalar que se requiere la opción "NOT NULL" para campos únicos (como lo hizo en su código de creación de tabla), ya que un valor NULL para nombre o fecha destruye la singularidad (es decir, es posible agregar el usuario 'xxx' varias veces si la fecha es NULL). – Javaguru

1

De varias maneras.

Primero, puede crear un índice en su tabla. (Estoy usando una tabla simple como ejemplo).

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` 
); 

Esta es la manera de MySQL.

También debe hacer comprobaciones en PHP, aunque puede hacerlo al insertar (MySQL devolverá un error y puede verificarlo). Pero puede hacer SELECCIONAR adicional antes de insertar (SELECT * from test WHERE name=USER AND date=DATE) y verificar el recuento de registros. Si es más de 0, muestra error.

Al guardar, rara vez debe preocuparse por un SQL adicional. Si es así, simplemente revisa la declaración de MySQL para ver si hay errores (modo MySQL :)).

Cuestiones relacionadas