mysql + PHP投票系统与排名

时间:2015-03-15 23:14:22

标签: php mysql

这是当前的系统。当用户对某个项目进行投票时,他的IP和POST_ID被记录到IP_LOG表中。问题是我希望按他们的等级(Upvotes-Downvotes)订购帖子。

所以显示就像是。

  1. POST_ID - > 32425(7票)
  2. POST_ID - > 12331(4票)
  3. POST_ID - > 24211(3 upvotes)
  4. 当列表中的项目向上或向下移动时,问题就变得很简单了,我希望允许任何投票此项目的用户能够对该项目进行重新投票。

    因此,如果第3项要获得2个向上投票,它将使用第2项切换位置,然后我将从IP日志表中删除所有投票给12331或24211的IP。

    1. POST_ID - > 32425(7票)
    2. POST_ID - > 24211(5 upvotes)
    3. POST_ID - > 12331(4票)
    4. IP_LOG

      ID  |     IP          | POST_ID | 
      ---------------------------------
      1   |  xxx.xxx.xx     |  12331  |  
      ---------------------------------
      2   |  yyy.yyy.yy     |  12331  |
      

      POST_RANK

      ID  | POST_ID | Downvotes | Upvotes
      -----------------------------------
      1   |  32425  |  3        |  10
      -----------------------------------
      2   |  12331  |  1        |  5
      -----------------------------------
      3   |  24211  |  1        |  4
      

      我的问题是:

      我的SQL查询是什么,允许我根据(upvotes-downvotes)的数量选择POST_ID的等级

      返回的东西:

      1. POST_ID => 32425,Rank => 1
      2. POST_ID => 12331,Rank => 2
      3. POST_ID => 24211,Rank => 3
      4. 尝试:

        SELECT COUNT(*)
                  FROM POST_RANK
                 WHERE Upvotes - Downvotes) AS Rank
        

        或者,在不使用cron作业的情况下,完成此功能的另一种方法是什么。我想立即更新。

1 个答案:

答案 0 :(得分:1)

试试这个:

SELECT (Upvotes - Downvotes) as Rank
          FROM POST_RANK
         WHERE post_id=<id>

更新

试试这个:

select @rownum:=@rownum+1 as rank, p.* FROM POST_RANK, (SELECT @rownum:=0) r order by (Upvotes - Downvotes) desc