> 데이터 베이스 > MySQL 튜토리얼 > MySQL에 배열을 저장하지 않고 댓글 평가 시스템에서 다중 투표를 방지하는 방법은 무엇입니까?

MySQL에 배열을 저장하지 않고 댓글 평가 시스템에서 다중 투표를 방지하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-10-31 02:35:01
원래의
708명이 탐색했습니다.

How to Prevent Multiple Votes in a Comment Rating System Without Storing Arrays in MySQL?

MySQL에 배열 저장: 대체 접근 방식

댓글 평가 시스템에서 다중 투표를 방지하려면 사용자 배열을 저장하려고 합니다. MySQL 필드의 ID입니다. 이는 MySQL에서 직접 지원되지 않지만 다음과 같은 대체 접근 방식을 고려하십시오.

데이터베이스 스키마

세 개의 테이블 생성:

  • comments: 댓글 ID와 본문을 포함합니다.
  • users: 사용자 ID와 사용자 이름을 저장합니다.
  • comments_votes: 댓글을 사용자에게 링크합니다. 투표 유형을 포함하여 투표한 사람
CREATE TABLE comments (
    comment_id int, 
    body varchar(100), 
    PRIMARY KEY (comment_id)
);

CREATE TABLE users (
    user_id int, 
    username varchar(20), 
    PRIMARY KEY (user_id)
);

CREATE TABLE comments_votes (
    comment_id int, 
    user_id int, 
    vote_type int, 
    PRIMARY KEY (comment_id, user_id)
);
로그인 후 복사

예시 데이터

INSERT INTO comments VALUES (1, 'first comment');
INSERT INTO comments VALUES (2, 'second comment');

INSERT INTO users VALUES (1, 'user_a');
INSERT INTO users VALUES (2, 'user_b');

INSERT INTO comments_votes VALUES (1, 1, 1);
INSERT INTO comments_votes VALUES (2, 1, 1);
로그인 후 복사

사용자 자격 확인

사용자가 특정 댓글에 이미 투표했는지 확인하려면 간단한 쿼리를 사용하세요.

SELECT COUNT(*) FROM comments_votes WHERE comment_id = <comment id> AND user_id = <user id>;
로그인 후 복사

이 접근 방식은 comments_votes 테이블의 기본 키 제약 조건이 고유성을 보장하므로 여러 투표를 방지합니다.

복수 투표 방지

사용자가 이미 투표한 경우 쿼리 결과에 따라 시스템 로직에서 투표 아이콘을 비활성화합니다.

이 접근 방식의 장점

  • 외래 키 제약 조건을 통해 데이터 무결성을 보장합니다.
  • 배열을 단일 필드로 직렬화할 필요가 없습니다.
  • 데이터베이스 단순화 운영하고 데이터 손상 위험을 줄입니다.

위 내용은 MySQL에 배열을 저장하지 않고 댓글 평가 시스템에서 다중 투표를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿