2010-08-03 5 views
2

각 사용자는 항목 당 한 번 투표 할 수 있습니다 (등록 된 사용자 만 투표 할 수 있음). 따라서 사용자 ID, 투표 된 항목 ID 및 투표 값 (1에서 10까지)을 포함하는 사용자 투표 테이블이 있습니다.PHP/MySQL : 등급 시스템 - 각 사용자 투표 수를 합산하거나 일반 투표 표를 업데이트 하시겠습니까?

각 항목의 총 투표 수와 등급을 표시하여 가장 좋은 것이 무엇인지 알고 싶습니다. user_votes 테이블에서 해당 항목에 대한 모든 투표를 가져 오거나 사용자가 일반 투표 표에 투표 할 때마다 투표를 저장하십시오. 그런 다음 그 필드 형식의 데이터베이스 만 얻으시겠습니까?

답변

0

그냥 합계를 늘리면 동일한 사용자의 반복 투표를 방지 할 수 없습니다.

두 가지를 조합하여 사용할 수 있습니다. 모든 투표와 user_id/ip 주소를 나열하는 테이블을 유지하여 투표하지 않은 것을 확인하고 항목에 관련된 합계를 유지하여 투표 테이블을 쿼리하지 않아도됩니다.

1

계산 된 등급 값을 항목 테이블에 저장해야 등급 등으로 항목을 정렬 할 수 있습니다. 훨씬 더 쉬울 것입니다.

+0

답변을 다시 읽었을 때 동의하지 않습니다. 값을 저장하는 것은 기존 데이터와 동기화되도록 업데이트하는 것을 의미합니다 ** 및/또는 ** 투표 다운. 이 대답은 중복 된 중복 데이터를 옹호합니다. 집계 함수 (COUNT 또는 SUM, 필요에 따라 다름)를 사용하여 검색 할 수 있습니다. –

+0

네, 때로는 복잡한 쿼리를 수행하기 위해 중복 데이터가 필요합니다. * 빠름 *. 놀람? – Sergei

1

고려해야 할 요소는 정확히 얼마나 많은 투표 수를보고 있는지입니다. 우리가 방대한 규모로 이야기하고 있다면 (수십만 개에 달하는 수십만 표 이상), 모든 투표를 저장하면 가치가있는 것보다 많은 자원을 사용하게 될 것입니다.

반면에 합리적으로 적은 수의 표가 있다면 (수백 개의 항목 각각에 대해 수백 개 미만의 기록), 제공 할 수있는 추가 유연성을 위해 각 표를 저장하는 것이 유리할 수 있습니다 앞으로의 개발에. 지금부터 한 달이 지나면이 정보에 대해 새로운 것을 생각해 볼 수 있습니다. 투표 수주를 확보하는 것이 어떻게 효과가 있는지 잘 이해하는 데 도움이 될 수 있습니다.

다른 사람들이 언급했듯이 메타 테이블과 쉽게 결합하여 작업을 쉽게 정렬하고 쿼리를 단순화 할 수 있습니다. 개인적으로이 유형의 데이터는 view을 권장합니다. 이렇게하면 파생 데이터가 포함 된 필드에 대한 업데이트를 자동으로 수행하여 오버 헤드를 줄일 수 있습니다.

관련 문제