2010-07-13 4 views
7

Grüße an alle. Neuling hier. Frage zur Vermeidung von doppelten Eintragungen in meinem einfachen Webformular.Erstellen eines eindeutigen Schlüssels in der MySQL-Tabelle mit Bezug auf das Datum

Meine Tabelle Datensatz Benutzereingabe von einem Web-Formular und unterschieden nach Datum, z. DATUM(). Wie verhindert man, dass Benutzer mit demselben Namen Informationen zweimal in einem einzigen Datum eingeben, z. Derselbe Nutzername kann nicht zweimal am selben Datum eingegeben werden, aber kann an einem anderen Datum eingegeben werden?

Hoffe jemand kann mich dazu beraten. Danke ist Fortschritt.

Antwort

9

Ihre Tabelle sollte diese haben:

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

Danke für alle Ratschläge :) Wie vorgeschlagen, wird es den gleichen Eintrag vom gleichen Datum verhindern. Aber wenn ich das Datum auf das nächste Datum ändere, wird "duplicated name" angezeigt. Wie kann der gleiche NAME am anderen DATE erneut eingegeben werden? – cys

+0

Vielleicht haben Sie auch einen eindeutigen Schlüssel auf den Namen? Bitte führen Sie dies aus: 'show create table tablename' und veröffentlichen Sie die Ergebnisse. – ceteras

+0

Danke Jungs, ich schaffe es zum Laufen. Ich gebe eine if..else-Anweisung ein, um zu bestätigen, ob irgendeine Zeile mit DATE und NAME gleich ist, führe dann keinen Datensatz aus, sonst gebe record ein. Ich habe von euch allen die Idee bekommen, NAME und DATUM einzigartig zu machen. Danken! :) – cys

1

Sie können einfach, einen zusammengesetzten Primärschlüssel erstellen. Für Ihren Fall bedeutet dies, dass Ihr Primärschlüssel aus einem Datumsfeld und dem Benutzernamen-Feld bestehen muss.

+1

Dies ist auch möglich. Die zusammengesetzten PKs sind jedoch problematisch beim Erstellen von Beziehungen mit dieser Tabelle. Ich denke, UNIQUE Index ist besser Ansatz. –

+0

Ich stimme zu! Ich möchte jedoch darauf hinweisen, dass die "NOT NULL" -Option für eindeutige Felder erforderlich ist (wie in Ihrem Tabellenerstellungscode), da ein NULL-Wert für Name oder Datum die Eindeutigkeit zerstört (dh es ist möglich, den Benutzer 'xxx' mehrmals, wenn das Datum NULL ist. – Javaguru

1

Auf verschiedene Arten.

Zuerst können Sie einen Index für Ihre Tabelle erstellen. (Ich verwende eine einfache Tabelle als Beispiel).

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

Dies ist MySQL Weg.

Sie sollten auch in PHP überprüfen, obwohl Sie es beim Einfügen tun können (MySQL wird Fehler zurückgeben und Sie können es überprüfen). Sie können jedoch vor dem Einfügen (SELECT * from test WHERE name=USER AND date=DATE) zusätzliche SELECT vornehmen und die Anzahl der Datensätze überprüfen. Wenn es mehr als 0 ist, zeigen Sie einen Fehler an.

Beim Speichern sollten Sie sich selten um ein zusätzliches SQL kümmern. Wenn Sie sollten, überprüfen Sie einfach die MySQL-Anweisung auf Fehler (MySQL Weg :)).

Verwandte Themen