0

投票テーブルがあり、POST値が1の場合は、tableA column_a +1を更新します。それ以外の場合は、tableAcolumn_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を使用して列を指定することはできませんが、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 = ?

そして、ここにいくつかのサンプルSQLFiddleがあります。

幸運を。

于 2013-02-13T02:07:15.093 に答える
0

私には2つの部分からなる答えがあります:

まず、行の値に基づいて更新する列を選択するという、やりたいことができません。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私の表現では、1つの列のみを更新していることを強調していると思います。

于 2013-02-13T02:10:13.497 に答える