2013-01-22 2 views
0

투표 시스템을 만들었습니다. 로그인 한 사용자 만 투표 할 수 있습니다. 나는이 같은 사용자와 여론 조사에 외래 키를 저장하는 테이블이 : 사용자가 투표를 선택했는지 확인

poll_voters 
| ref_user_id | ref_poll_id | 

사용자 ID가 테이블의 현재 여론 조사와 함께 존재하는 경우 사용자 투표 내가 확인

. 그럴 경우 사용자는 이미 투표했습니다.

투표 양식을 표시할지 여부 또는 사용자가 이미 투표 한 경우 결과를 알 수 있도록 모든 페이지를로드해야하는지 궁금합니다. 또 다른 방법은 사용자가 투표했는지 여부를 나타내는 세션을 만드는 것입니다. 그리고 그가 로그인 할 때 나는 수표를하고 당연히 세션을 설정해야 할 것입니다.

내가 어떻게해야한다고 생각합니까?

+0

희망이 도움이 될 수 있습니다 :: http://stackoverflow.com/questions/10480568/comma-separated-values-in-mysql-in-clause –

+0

@lawis 그래서 두 개의 테이블,'users'와'poll_votes'가 있습니다. 예 또는이 사용자가 세션에서 오는 중입니까? – bonCodigo

+1

현재 "투표 양식"을 어떻게 표시하고 있습니까? 그렇다면 질문에 대한 답을 추가 할 수 있습니까? 사용자가 대답하지 않으면 null이됩니다. – sgeddes

답변

0

세션이 있고 사용자가 로그인 할 때 투표 상태를 확인하는 것이 가장 좋습니다. 모든 페이지로드시 데이터베이스를 점검 할 필요가 없습니다. 비효율적입니다 (로드가 빛이다).

사용자가 투표 할 때 페이지 (또는 요소, ajax 사용)를 새로 고침해야합니다.

+0

세션은이 문제에 대한 훌륭한 해결책이 아닙니다. 데이터베이스로가는 것이 올바른 방법이며 원하는 경우 캐싱 솔루션을 구현할 수 있습니다. –

+0

@ 닉 왜 좋은 솔루션이 아닌지 설명해 주시겠습니까? – lawls

+0

사용자가 로그인 할 때 데이터베이스로 이동하여 결과를 세션에 저장합니다. 이는 모든 페이지로드시 데이터베이스를 호출하는 것보다 효율적입니다. – NickJ

1

투표 표시기없이 모든 HTML을 렌더링 한 다음 페이지가 브라우저에로드 된 후 AJAX 호출을 수행하여 항목의 투표 상태를 얻는 것이 좋습니다.

이렇게하면 페이지를 브라우저에 캐시하거나 서버에서 정적으로 캐시 할 수 있지만 동적 업데이트는 계속 지원합니다. 따라서 사용자가 페이지를 다시 방문하면 업데이트 된 투표 상태가 변경됩니다.

그렇지 않으면 항상 모든 HTML 페이지를 각 사용자의 세션마다 다르게 렌더링해야합니다.

0

활성 폴링이 둘 이상인 경우 폴링 ID를 DB에 저장해야합니다 (설문 조사가 더 필요하지 않을 수도 있지만 예일 경우 어떻게해야합니까?). 이 경우 사용자에게 투표 또는 투표하지 않은 설문 조사를 보여주는 모든 페이지로드를 쿼리 할 수 ​​있습니다. 그러나 최신 여론 조사에서 모든 페이지에 표시하고 쿼리를 최신 설문 조사를 수행해야합니다 ... 만 가능하면

1

당신은 각 사람을 위해 삽입 문

if not exists(select ref_user_id 
    from poll_voters 
    where ref_user_id [email protected]_user_id and ref_poll_id = @ref_poll_id) 
insert into poll_voters (ref_user_id ,ref_poll_id) 
values (@ref_user_id ,@ref_poll_id) 

그 방법에 추가 할 수 있습니다 설문 조사마다 한 번 투표하십시오

1

기록을 렌더링 할 때 사용자가 설문에 투표했는지 여부를 조금씩 가져 오십시오. 투표 결과를 표시하지 않고 데이터베이스에 레코드가 존재하는지 여부를 확인하기 전에 투표하십시오. 내 경험에 의하면 이것이 최선의 방법이라고 생각합니다.

관련 문제