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 表示反对

现在我遇到了一点逻辑问题。

例如

  1. 如果用户已经在parking_spot 上投票了怎么办
  2. 我如何检查用户是否已经投票,如果他还没有然后插入,但如果他已经没有投票了。

  3. 我如何更新用户(uploaded_by_user_id)分数。加一表示赞成票,减一表示反对票。

所以一般流程是

用户按下投票,服务器检查是否已经被投票,如果是则不能再次投票。如果不是,则 vote_casted_user_id = 当前用户,parking_spot_id = 当前信息,upload_by_user_id = 上传信息的人,然后根据投票类型更新 upload_by_user 分数。

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

对我有什么想法吗?

4

2 回答 2

3
  1. 如果用户已经对停车位进行了投票怎么办?
  2. 我如何检查用户是否已经投票,如果他还没有然后插入,但如果他已经没有投票了。

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

我如何更新用户(uploaded_by_user_id)分数。加一表示赞成票,减一表示反对票?

如果不是太麻烦,我会将 vote_type 的值更改为 +1 表示赞成,-1 表示反对。那么这只是一个问题SELECT SUM(vote_type) FROM table WHERE uploaded_by_user_id=...

我希望这有帮助

于 2011-07-20T14:12:59.003 回答
1

您可以考虑使用parking_spot_id、uploaded_user_id、casted_user_id 设置主键

因此,当同一用户对同一上传用户的同一停车位进行投票时,您可以捕获异常并处理“您已经投票!”

如果您不喜欢这样您可以通过编写自己的控制机制来处理流程

在保存投票之前写一个选择来获取具有parking_spot_id,uploaded_user_id,casted_user_id的记录计数如果计数大于0这意味着已经有投票然后不要保存并提供您的消息。否则保存您的投票并选择用户的分数增加它通过投票和更新记录。

希望这可以帮助。

于 2011-07-20T14:05:04.960 回答