문제

댓글을 달 수있는 몇 가지 객체가있는 PHP 앱에서 작업하고 있습니다. 각 의견은 투표 할 수 있으며 사용자는 +1 또는 -1 (Digg 또는 Reddit)을 제공 할 수 있습니다. 지금 당장 저는 user_id와 그들의 투표 정보를 제공하는 '투표'테이블을 가질 계획입니다.

문제는 각 객체에는 별도의 주석 테이블에 저장된 수백 개의 주석이 있습니다. 의견을로드 한 후에는 투표를 집계 한 다음 한 번만 투표 할 수 있도록 사용자에 대한 각 투표를 개별적으로 확인해야합니다. 이것은 작동하지만 실제로 데이터베이스 집약적 인 것 같습니다. 주석에 대한 많은 쿼리입니다.

DB 집약적이지 않은 더 간단한 방법이 있습니까? 내 현재 데이터베이스 구조가 가장 좋은 방법입니까?

현재 데이터베이스 구조에 대해 더 명확하게하려면 :

댓글 테이블 :

  • user_id
  • Object_id
  • Total_votes

투표 테이블 :

  • 댓글_ID
  • user_id
  • 투표

최종 목표 :

  • MySQL 쿼리의 최소 번호로 각 의견에서 사용자가 한 번만 투표 할 수 있도록합니다 (각 객체는 여러 주석이 있습니다).
도움이 되었습니까?

해결책

각 유권자가 한 번만 투표하는지 확인하려면 CommentID, UserID, VoteValue (CommentID)와 함께 투표 테이블을 설계하십시오. 의견을 제시하고 userID를 기본 키로 만들어 한 사용자가 하나의 투표 만받을 수 있도록합니다. 그런 다음 의견에 대한 투표를 쿼리하려면 다음과 같은 작업을 수행하십시오.

SELECT SUM(VoteValue)
FROM Votes
WHERE CommentID = ?

그게 도움이 되나요?

다른 팁

모든 의견에 대해 총 투표를 저장하지 않겠습니까? 새로운 투표가 일어 났을 때 이것을 증가/감소시킵니다.

그런 다음 사용자가 사용자 당 댓글 당 하나의 투표 만 허용하기 위해 사용자 가이 의견에 대해 특별히 투표했는지 확인해야합니다.

이 객체에 대해 현재 사용자의 의견에 모든 투표를 반환하는 SQL 조인 조건을 넣을 수 있습니다. 행이 없으면 사용자가 투표하지 않았습니다. 그것은 프로그램에서 각 의견을 하나씩 확인하는 것과 약간 다릅니다.

데이터베이스 구조에 관한 한, 이러한 것들을 분리하는 것은 완벽하게 논리적으로 보입니다. 투표 {user_id, object_id, object_type, vote_info ...)

당신은 이미 이것을하고 있을지도 모르지만 죄송합니다. 그러나 그것이 사실이라면 당신의 게시물에서 해석 할 수 없었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top