【问题标题】:update mysql database according to the current values in it根据其中的当前值更新mysql数据库
【发布时间】:2013-06-10 00:04:19
【问题描述】:

如何根据数据库中的当前值更新数据库。我目前有以下 -

mysqli_query($con,
"UPDATE Tasks
SET completed = CASE WHEN completed == 0 THEN 1 ELSE 0 END
WHERE inde=$q");

上述方法不起作用,但是当我尝试这样做时

mysqli_query($con,
"UPDATE Tasks
SET completed = 1
WHERE inde=$q");

当它为 0 时它会更改值,这是正确的,但我也想在它为 1 时将其更改为 0。有人可以告诉我我做错了什么

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    应该是:

    UPDATE  Tasks set completed= IF(completed=1, 0, 1) WHERE inde=$q LIMIT 1
    

    限制 1,如果 inde 是唯一索引,则加快更新速度(对于小表来说微不足道,对于大表可能值得)

    ... 限制 1 可能什么都不做,而且可能是个坏主意。 Is there any point using MySQL "LIMIT 1" when querying on indexed/unique field?

    【讨论】:

    • 好奇你从哪里得到LIMIT 1 ;-)
    • "如果 inde 是唯一索引,则加快更新速度" --- 你这么认为吗?我一直认为mysql的优化器足够聪明,可以看到索引是唯一的,因此在找到一行后停止搜索,hmhm
    • 你可能是对的,这是我养成的习惯,研究表明,它没有任何作用,我会尝试改掉这个习惯,在喝酒\吸烟\女人化之后。
    【解决方案2】:
    CASE WHEN completed == 0 THEN 1 ELSE 0 END
    

    这应该是:

    CASE WHEN completed = 0 THEN 1 ELSE 0 END
    

    或:

    CASE completed WHEN 0 THEN 1 ELSE 0 END
    

    【讨论】:

      【解决方案3】:

      尽管这个问题已经得到解答,但是,我只想提出快速且最短的答案,前提是已完成仅包含 0 和 1。

      UPDATE Tasks set completed=!completed WHERE inde=$q
      

      注意 NOT(!) 运算符,它将切换值本身,即将 1s 更改为 0s,将 0s 更改为 1s。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-07
        • 1970-01-01
        • 2011-08-05
        • 1970-01-01
        • 2011-01-29
        • 1970-01-01
        • 2016-07-04
        相关资源
        最近更新 更多