2011-07-20 96 views
3

我正在寻找上下投票系统的帮助。投票系统存在逻辑问题

目前,我有一个引用投票的用户,谁是投给了用户,并且在投票

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

现在我有一点逻辑麻烦。

例如如果

  1. 用户已经投票在parking_spot
  2. 如何检查,如果用户已经投票,如果他没有再插入,但如果他有那么不已经投票了。

  3. 如何更新用户(uploaded_by_user_id)分数。加上一个赞成票和减去一个赞成票。

所以一般流程是,

用户按下了表决,如果已经投给了已经,如果这样,那么你不能再次投票服务器检查。 if not then vote_casted_user_id =当前用户,parking_spot_id =当前信息,uploaded_by_user_id =上传信息的人, 然后uploaded_by_user得分将根据投票类型更新。

我正在使用java连接到MYSQL数据库的JDBC连接。

对我而言有什么想法?

+2

所以做事情佛罗里达州。 – Moonbeam

回答

1

您可以考虑设置你与parking_spot_id,uploaded_user_id主键,casted_user_id

所以当一票来自于相同的上载用户的同一停车点相同的用户,您可以捕获该异常,并处理它说:“你有已经投票!“

如果你不喜欢这个 可以通过保存票写一个选择获得的记录数与parking_spot_id,uploaded_user_id,casted_user_id之前编写自己的控制机制

处理过程中如果计数大于0这意味着已经有一个投票然后不保存并给你的消息。否则保存你的投票并选择用户的分数通过投票增加它并更新记录。

希望这会有所帮助。

3
  1. 如果用户已经对parking_spot投了票,该怎么办?
  2. 我如何检查用户是否已经投票,如果他没有再插入,但是如果他已经没有投票已经投票。

这些基本上是同样的问题:我如何测试一个用户是否已经投票在parking_spot?那么,只需运行一个查询来获取parking_spot_id和vote_casted_user_id匹配的记录。

如何更新用户(uploaded_by_user_id)分数。加一个赞成票和减去一个赞成票的赞成票?

如果没有太大的麻烦,我会将vote_type的值更改为+1,对于upvote则为+1,downvote则为-1。然后,它只是一个SELECT SUM(vote_type) FROM table WHERE uploaded_by_user_id=...

我希望这有助于