MySQL根据其原始值更改值

时间:2010-11-04 03:24:27

标签: sql mysql logic

Hy大家, 长时间读者,第一次海报。

这听起来应该很简单,但我无法在任何地方找到解决方案。我正在建立一个评级系统,人们可以评估某些东西是否活跃。它有自己的逻辑,但我需要它。

  1. 检查项目评级
  2. 取决于当前的评级,将其更改为预先设定的金额。
  3. 我可以使用两个SQL语句在PHP中对其进行硬编码,但我确信使用单个存储过程(一个用于投票,另一个用于投票)会更快。

    示例表:

    item_id | item_rating
    ---------------------
       10   |    1
    

    投票item_rating的逻辑:

    if | then
    ---------
     0 |  1
     1 |  2
    -1 |  1
    -2 |  1
     2 |  2
    

    将item_rating投票的逻辑:

    if | then
    ---------
     0 | -1
     1 | -1
    -1 | -2
    -2 | -2
     2 | -1
    

    我知道一个简单的基于点的系统会更容易,但由于系统的性质,这是我能找到的最简单的解决方案。

    有人可以解释我如何在SQL中使用IF语句来实现这一目标吗?我确信答案对于知情人士来说非常明显。

    (顺便说一句,使用最新版本的MySQL)

2 个答案:

答案 0 :(得分:3)

这是你要找的吗?这是一个upvote:

UPDATE rating
SET item_rating = IF(item_rating < 1, 1, 2);

这是一个downvote:

UPDATE rating
SET item_rating = IF(item_rating > -1, -1, -2);

答案 1 :(得分:0)

这是未经测试的,但我认为它应该有用。

update items i
set item_rating = (select i.item_rating + `then` from item_rating
                   where `if` = i.item_rating)
where i.item_id = 10