【问题标题】:Implementing voting or "likes" using MySQL [closed]使用 MySQL 实现投票或“喜欢”[关闭]
【发布时间】:2016-09-19 20:42:34
【问题描述】:

我正在创建一个系统,允许用户(通过用户 ID 号识别)对帖子进行投票(想想 Reddit、StackOverflow 等)。

用户可以对帖子投票或根本不投票。

给定帖子的投票数可以轻松存储在包含帖子的表格中。

但是,跟踪谁投票是一项完全不同的任务,我不知道该怎么做。

我在想我可以有一个包含两列的表:用户 ID 和帖子 ID。

当他们对帖子进行投票时,我会将他们的用户 ID 和帖子 ID 添加到该表中。如果他们不投票,我会从表格中删除该条目。

EG:

User ID | Post ID
1       | 3949
1       | 4093 
2       | 3949
etc...

这是一个合理的解决方案吗?

【问题讨论】:

  • "这是一个合理的解决方案吗?"是的。

标签: php android mysql sql database


【解决方案1】:

是的,这是相当简单且容易解决问题的方法。你可以为你的 cmets 做同样的事情(如果你愿意的话)。在您的 MAIN_POST 表中分配一个 post_id 并在其他表中使用相同的 post_id(cmets(post_id, user_id, post_comment, comment_time) 和 votes(post_id, user_id, vote_status(您可以使用 1 表示赞成,0 表示反对))) .它将使您的 sql 查询复杂化,以检索数据,但您可以做到。在 android 端,有很多技巧可以在应用程序中处理和提供这些数据,你可以像 facebook 一样进行投票(喜欢)和 cmets 的想法(你代表你的 cmets 和点赞,其他人代表姓名)。

【讨论】:

    【解决方案2】:

    我不会从表中删除行。我理解您为什么要这样做,但为什么会丢失信息?相反,为每个条目保留一个 +1/-1 值,然后对帖子的值求和:

    select sum(vote)
    from uservotes
    where postid = 1234;
    

    而且,我同意 Rick 的观点,您还应该包括创建日期/时间。

    【讨论】:

      【解决方案3】:

      在这种情况下,使用“中间”或“连接”表是完全可以接受的解决方案。如果相关,您甚至可以为关系添加时间戳,并在用户投票时向用户显示。

      此外,重要的是要注意正确的索引和键,以使您的表结构在数据集增长后也能正常运行。

      【讨论】:

        猜你喜欢
        • 2015-09-15
        • 2011-09-29
        • 1970-01-01
        • 2012-11-02
        • 1970-01-01
        • 1970-01-01
        • 2012-05-01
        • 1970-01-01
        • 2020-10-13
        相关资源
        最近更新 更多