2010-07-13 4 views
7

모두에게 인사드립니다. 여기 뉴비 야. 내 간단한 웹 양식에서 중복 된 항목을 방지하는 것에 대한 질문.날짜를 나타내는 MySQL 테이블의 고유 키 만들기

내 표는 웹 양식의 사용자 입력을 기록하며 날짜로 구분됩니다. 날짜(). 동일한 이름을 가진 사용자가 단일 날짜에 두 번 정보를 입력하는 것을 방지하는 방법 (예 : 동일한 날짜에 동일한 사용자 이름을 두 번 입력 할 수 없지만 다른 날짜에 입력 할 수 있습니까?

누군가가 조언을 해줄 수 있습니다. 고마워요.

답변

9

귀하의 표는이 있어야합니다

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

모든 조언 주셔서 감사합니다 :) 제안 된대로 시도했지만 같은 날짜에 같은 항목이 표시되지 않습니다. 그러나 다음 날짜로 날짜를 변경하면 '중복 된 이름'이 표시되어 기록을 입력 할 수 없습니다. 같은 NAME을 다른 DATE에 다시 입력하는 방법은 무엇입니까? – cys

+0

이름에 고유 한 키가있을 수도 있습니다. 'show create table tablename'을 실행하고 결과를 게시하십시오. – ceteras

+0

고마워, 나는 그걸 달릴 수있어. if..else 문을 넣어 DATE와 NAME이 같은 행이 있는지 확인한 다음 입력 레코드를 실행하지 않습니다. 그렇지 않으면 레코드를 입력하십시오. NAME과 DATE를 고유하게 만들었습니다. 감사! :) – cys

1

당신은 단순 복합 기본 키를 만들 수 있습니다에 대한 고유 키를 생성합니다. 이 경우 사용자의 기본 키는 사용자 이름 필드와 날짜 필드로 구성되어야합니다.

+1

이것은 또한 가능합니다. 그러나 복합 PK는이 테이블과 관계를 만들 때 문제가됩니다. 나는 UNIQUE 지수가 더 나은 접근이라고 생각한다. –

+0

동의합니다! 그러나 이름이나 날짜의 NULL 값이 고유성을 파괴하기 때문에 고유 필드에 대한 "NOT NULL"옵션이 필요합니다 (테이블 작성 코드에서와 같이). 날짜가 NULL이면 여러 번 'xxx'사용자). – Javaguru

1

여러 가지면에서.

먼저 테이블에 색인을 생성 할 수 있습니다. (나는 간단한 테이블을 예로 사용하고있다).

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

이것은 MySQL 방식입니다.

또한 PHP로 체크인해야하지만 삽입 할 때도 할 수 있습니다 (MySQL에서 오류를 반환하고 확인할 수 있음). 그러나 삽입하기 전에 추가 선택을하고 (SELECT * from test WHERE name=USER AND date=DATE) 레코드 수를 확인하십시오. 0보다 크면 오류가 표시됩니다.

저장할 때 추가 SQL이 하나 정도 걱정되는 일은 거의 없습니다. 당신이해야한다면, 그냥 MySQL의 성명을 확인하십시오 (MySQL의 방법 :)).