2013-01-22 162 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所以你有两个表,'用户'和'poll_votes'是或这个用户来自一个会议? – bonCodigo

+1

你目前如何显示“投票表单” - 这些表单数据库驱动?如果是这样,你可以添加答案和问题 - 如果用户没有回答,它们将为空? – sgeddes

回答

0

这将是最好有一个会话,并检查投票情况时,用户日志有没有必要检查对每个页面加载数据库,这将是低效的(尽管它仍然会在负载工作是轻的)。

您还需要在用户投票时刷新页面(或元素,使用ajax)。

+0

会话对于这个问题不是很好的解决方案。去数据库是正确的方法,如果你希望你可以实现缓存解决方案。 –

+0

@尼克你能解释一下为什么它不是一个好的解决方案吗? – lawls

+0

当用户登录时,您将转到数据库,并将结果存储在会话中。这比在每次页面加载时调用数据库更高效。 – NickJ

1

我会建议您在没有投票指示器的情况下渲染所有HTML,然后在浏览器中加载页面后执行AJAX调用以获取项目的投票状态。

这使您可以在浏览器上缓存页面或静态地在服务器上缓存页面,但仍支持动态更新。因此,如果用户再次访问该页面,并且他们已更改了投票状态并更新了它。

否则,您必须始终以不同的方式为每个用户的会话重新呈现所有HTML页面。

0

如果您有多个活动民意调查,您应该在数据库中存储民意调查ID(可能您不需要更多的民意调查,但如果是的话,会怎么样?)。在这种情况下,我可以对每个页面加载进行查询,向用户显示投票或未投票的投票。但是,只有最新的民意调查应该显示在每一页上,并做查询只有最新的民意调查...

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

当你提交记录时,取一些用户是否投票投票或不投票。如果投了票然后不显示投票指标,并在插入数据库之前检查记录是否存在。我的经验我认为这将是最好的方式。