0

我有一个投票表,如果 POST 值为 1,则更新 tableA column_a +1 否则更新 tableA column_b +1

这是我的查询,不知道如何在这里使用 IF 语句。

UPDATE 
    votes, 
    topics 
SET votes.yesno = 1,
    IF(votes.yesno = 1, topics.num_yes = topics.num_yes+1, topics.num_no = topics.num_no+1)
WHERE votes.user_id=? AND votes.topic_id=?
AND topics.id = votes.topic_id
4

2 回答 2

1

我想这可能是你正在寻找的。您不能使用 IF 来指定列,但可以使用它来指定值:

UPDATE votes v
   INNER JOIN topics t ON v.topic_id = t.topic_id
SET v.yesno = 1,
   t.num_yes = IF(v.yesno = 1, t.num_yes + 1, t.num_yes),
   t.num_no = IF(v.yesno = 1, t.num_no, t.num_no + 1)
WHERE v.user_id = ? 
   AND v.topic_id = ?

这是一些示例SQL Fiddle

祝你好运。

于 2013-02-13T02:07:15.093 回答
0

我有一个两部分的答案:

首先,你不能做你想做的事,就是根据一行的值来选择更新哪一列。该UPDATE语句具有非常具体的语法。

其次,无论如何你都可以得到你想要的结果:

UPDATE
    votes,
    topics
SET votes.yesno = 1,
    topics.num_yes = topics.num_yes + (0 XOR votes.yesno),
    topics.num_no  = topics.num_no  + (1 XOR votes.yesno)
WHERE topics.id = votes.topic_id

您也可以IF在该SET部分中使用,但我认为我的表达强调您只更新其中一列。

于 2013-02-13T02:10:13.497 回答