2011-11-03 3 views
2

나는 5 개 등급 시스템을 이미 갖추고있다. (사용자 투표 1-5 ... 평균 점수가 표시된다. 나는 투표를하고 DB에 사용자 이름과 투표를 삽입하는 페이지를 가지고있다.) 그러나 나는 지금 귀하의 투표가 콘텐츠의 평균 점수에 미치는 영향을 증가시키는 기능 만하는 어떤 종류의 가중치를 통합함으로써 그것을 향상시킬 수 있습니다. 그것은 당신의 투표를 그렇지 않은 경우보다 "무게를 잴"수있게합니다.5 성급 투표 시스템에 가중치를 통합 하시겠습니까?

저는 현재 $level (각 사용자는 1 ~ 10 사이의 숫자입니다 ... 10은 가장 효과적이므로 가장 효과적입니다)을 고려하여 사용하고 싶습니다.

나는 이것을하는 방법에 대해 확신하지 못합니다.

답변

1

사용자가 레벨 X를 보유하고있는 경우 사용자는 투표에서 X 레벨 1 표의 무게를 잴 수 있습니다.

(? 어디 ID 필요) (이 사용자의 요구에 너무 복잡하게 생각한다면 및

SELECT AVG(weight * vote) 
FROM rating 
WHERE item = ? 

: 당신은 테이블에 다른 필드 "무게"를 추가하고 vote*weight의 평균을 표시 할 수 있습니다 투표를 한 사용자를 이미 저장 한 경우) 다음 쿼리를 사용할 수 있습니다.

SELECT AVG(r.weight * u.level) 
FROM rating 
JOIN user ON r.user_id = u.id 
WHERE r.item = ? 
+0

테이블의 가중치 열에는 사용자 투표 * 수준이 포함됩니까? – user962026

+0

@ user962026 마지막으로 유감스럽게 생각합니다 (잘못 읽은 것) : 가중치 열은 사용자의 레벨이됩니다 (더 적합한 경우 '레벨'로 지정할 수 있습니다). 나는 '무게'라는 이름을 붙였습니다. 왜냐하면 당신이 '레벨'과 독립적으로 그것을 변경할 수 있기 때문입니다. –

2

가장 쉬운 방법은 모든 레벨에 대해 DB에 투표를 하나만 삽입하는 것입니다.

for($i = 0; $i < $level; $i++) { 
    store_vote($user, $item); 
} 
+1

+1 가능한 가장 간단한 해결책은 다음과 같습니다. 단점은 아래에서 다시 계산할 수 없다는 것입니다. 가중 접근법을 선호하므로 결과가 이상하게 나왔을 때 가중치를 변경하고 다시 계산할 수 있습니다.하지만이 작업은 가장 간단한 방법이며 일부는 시나리오에서는 잘 작동합니다. 나는 단순한 "파워 유저들이 2 표를 얻는다면"이것을 사용하는 경향이 더 많을 것이다. 체중을 수정할 수없는 위험은 내게 이것을 10 점 척도로 사용하는 것을 주저하게 만듭니다. – Ian

관련 문제