Joh*_*hnT 8 session zend-framework vote doctrine-orm
我在投票网站上工作,我想知道如何处理投票.
例如,当您投票支持问题(或答案)时,您的投票会被存储,每次我返回页面时,我都可以看到我已经投票支持这个问题,因为上/下按钮是彩色的.
你是怎样做的?我的意思是我有几个想法,但我想知道它是否会成为数据库的重负荷.
这是我的想法:
写一个帮助者,如果已投票,将检查每个问题
这意味着查询的数量取决于页面上显示的项目数量(通常约为20)
在我的项目上循环获取id,并为每个页面写一个查询,如果投票已经输入或NULL,则返回该查询
看起来不错,因为只有一个查询与页面上的项目无关,但可能会破坏一些MVC /域模型设计,不知道.
当用户登录(或为其创建匿名用户的访客)检索所有投票时,将其存储在会话中,如果投入新投票,则只需将其添加到会话中.
看起来不错,因为除了第一个之外根本不需要任何查询,但是,根据投票的数量(可能是每个用户一堆),可以增加每个用户的会话大小并可能进行身份验证慢.
你好吗?还有其他想法吗?
例如:假设您有一个表来存储投票和投票的用户。
假设您在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。
谢谢