如果用户投票或不投票,您如何存储和显示?

Joh*_*hnT 8 session zend-framework vote doctrine-orm

我在投票网站上工作,我想知道如何处理投票.

例如,当您投票支持问题(或答案)时,您的投票会被存储,每次我返回页面时,我都可以看到我已经投票支持这个问题,因为上/下按钮是彩色的.

你是怎样做的?我的意思是我有几个想法,但我想知道它是否会成为数据库的重负荷.

这是我的想法:

  • 写一个帮助者,如果已投票,将检查每个问题

    这意味着查询的数量取决于页面上显示的项目数量(通常约为20)

  • 在我的项目上循环获取id,并为每个页面写一个查询,如果投票已经输入或NULL,则返回该查询

    看起来不错,因为只有一个查询与页面上的项目无关,但可能会破坏一些MVC /域模型设计,不知道.

  • 当用户登录(或为其创建匿名用户的访客)检索所有投票时,将其存储在会话中,如果投入新投票,则只需将其添加到会话中.

    看起来不错,因为除了第一个之外根本不需要任何查询,但是,根据投票的数量(可能是每个用户一堆),可以增加每个用户的会话大小并可能进行身份验证慢.

你好吗?还有其他想法吗?

Har*_*K T 1

例如:假设您有一个表来存储投票和投票的用户。

假设您在user_votes投票时使用类似于下面的表结构来保留选票。

id of type int autoincrement
user_id type int, Foreign key representing users table
question_id type of int, Foreign key representing questions table
Run Code Online (Sandbox Code Playgroud)

现在,当用户登录时,当您提取问题时,请与表中的 user_id 进行左连接user_votes

就像是

SELECT q.id, q.question, uv.id 
   FROM questions AS q 
   LEFT JOIN user_votes AS uv ON 
      uv.question_id = q.id AND 
      uv.user_id = <logged_in_user_id> 
   WHERE <Your criteria>
Run Code Online (Sandbox Code Playgroud)

从视图中您可以检查 id 是否存在。如果是,则标记投票,否则不投票。

您可能需要更改问题表等的字段。我假设您将问题存储在questions表中,将用户存储在user表中。都有主键id

谢谢