我正在寻找有关上下投票系统的帮助。
目前我有一张投票表,引用投票的用户,投票的用户和投票的信息(停车位)
CREATE TABLE parking_spots_votes(
vote_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
parking_spot_id INTEGER DEFAULT NULL,
key parking_spot_id_fk (parking_spot_id),
FOREIGN KEY (parking_spot_id) REFERENCES parking_spots(id),
uploaded_by_user_id INTEGER DEFAULT NULL,
key user_id_fk (uploaded_by_user_id),
FOREIGN KEY (uploaded_by_user_id) REFERENCES parking_angel_users(id),
vote_casted_user_id INTEGER DEFAULT NULL,
key vote_cast_user_id_fk (vote_casted_user_id),
FOREIGN KEY (vote_casted_user_id) REFERENCES parking_angel_users(id),
vote_type INTEGER NOT NULL
)
投票类型可以是0表示没有投票,1表示向上投票,2表示downvote
现在我遇到了一点逻辑上的麻烦。
例如
我如何检查用户是否已经投票,如果他没有投票,但如果他已经投票,则表示已经投票。
如何更新用户(uploaded_by_user_id)分数。加上一个投票,减一投票。
所以一般的流程是,
用户按下投票,服务器检查是否已经投票,如果是,那么你不能再投票。 如果没有则则vote_casted_user_id =当前用户,parking_spot_id =当前信息,uploaded_by_user_id =上传信息的人, 然后,upload_by_user分数将根据投票类型更新。
我正在使用带有与MYSQL数据库的JDBC连接的java servlet。
对我有什么想法?
答案 0 :(得分:3)
- 如果用户已经对parking_spot投票怎么办?
- 我如何检查用户是否已经投票,如果他没有插入,但如果他已经投票,则表示已经投票。
醇>
这些基本上是同一个问题:如何测试用户是否已经对parking_spot投票?好吧,只需运行一个查询来获取parking_spot_id和vote_casted_user_id匹配的记录。
如何更新用户(uploaded_by_user_id)分数。加上一个投票,减一投票?
如果不是太麻烦,我会将vote_type的值更改为+1表示upvote,-1表示downvote。那么这只是SELECT SUM(vote_type) FROM table WHERE uploaded_by_user_id=...
我希望这会有所帮助
答案 1 :(得分:1)
您可以考虑使用parking_spot_id,uploaded_user_id,casted_user_id设置主键
所以当同一个用户对同一个上传用户的同一停车位进行投票时,您可以捕获异常并处理“您已经投票了!”
如果你不喜欢这个 您可以通过编写自己的控制机制来处理进程
在保存投票之前写一个选择,用于获取记录的计数与parking_spot_id,uploaded_user_id,casted_user_id如果计数大于0这意味着已经有投票然后不保存并给出您的消息。否则保存您的投票并选择用户的得分通过投票增加并更新记录。
希望这有帮助。