【问题标题】:MYSQL IF(expr1,expr2,expr3) but I don’t want any expr3 (if expr3 then don’t output anythingMYSQL IF(expr1,expr2,expr3) 但我不想要任何 expr3 (如果 expr3 则不输出任何东西
【发布时间】:2009-12-03 10:14:29
【问题描述】:

正如标题所说,如果匹配,我只想要一个输出,如果它不匹配,那么我不想要任何输出。

我目前有这个,但它显然给出了一个错误

...rFormat=IF(ISNULL(rFormat), VALUES(rFormat),UNCHANGED)…

我环顾了http://dev.mysql.com/doc/refman/5.4/en/control-flow-functions.html,但并没有真正找到如何去做。

这个问题和Only update the MYSQL field if the field contains null or 0有点关系

这用于以下情况:(如上面的 URL 所示)

………
ON DUPLICATE KEY UPDATE
rFormat=VALUES(rFormat),
rFiles=IF(ISNULL(rFiles), VALUES(rFiles), VALUES(rSizeMB)),
rText=VALUES(rText);

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    你可以这样做

    IF(ISNULL(rFormat), VALUES(rFormat), rFormat)
    

    但是,我不确定您此时通过调用 VALUES() 想要达到什么目的。

    【讨论】:

    • 这是一个长查询的一部分,正如我之前发布的另一个问题中所见,stackoverflow.com/questions/1837912/… 我不想为 expr3 输出 rFormat,因为它会覆盖该字段中已有的内容是我不想要的。
    • 没问题。格雷格的回答比我的要好得多!
    • Greg 的也不起作用,不在我的“ON DUPLICATE KEY UPDATE”查询中 :( 谢谢你的尝试。
    • “它会覆盖字段中已有的内容” - 但您会使用字段中已有的值,因此没有任何更改。
    • 哦,你说的太对了!我在想它是$rFormat。谢谢大家!
    【解决方案2】:

    只需使用WHERE rFormat IS NULL 而不是IF

    【讨论】:

    • 这在我使用它的查询中不起作用:stackoverflow.com/questions/1837912/…
    • 你能举个例子说明你想要达到的目标吗?
    • 没关系,蒂姆解决了这个问题。同样感谢您的帮助,我稍后可能需要您的解决方案,我会记录这一切:)
    【解决方案3】:

    试试这个:

    rFiles = COALESCE(existingColumnValue,'$newValue')

    COALESCE 返回第一个非空值。请注意,如果 $newValue 是字符串,则需要在 $newValue 周围加上引号,并且不要忘记转义。您不会在列名 (existingColumnValue) 周围使用引号。如果您还在寻找具有 (INT) 0 作为值以及 NULL 的行,您可能想试试这个:

    rFiles = CASE existingColumnValue 当 NULL THEN '$newValue' 当 0 时 '$newValue' ELSE existingColumnValue 结束案例

    我不得不更改您的列名,以便更好地表达解决方案。我希望你仍然理解。我假设 $newValue 不是数据库中的另一列,而是从您的脚本传递的变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多