MySQL WHERE具有条件/优先级条件

时间:2013-07-25 15:21:15

标签: mysql sql mysqli

这个是一个奇怪的,我似乎无法绕过我的脑袋。

基本上我需要根据具有覆盖的值进行搜索。所以有2列具有基本相同的内容。一个是自动更新的,一个是手动的。如果自动一个不可用,它将使用手册,如果手册不可用,它将使用自动手册。最后,如果两者都可用,它将使用自动,除非启用“覆盖”标志(可能是第三列)。

我需要做的是使用列上的优先级集,基于该参数进行搜索,就像它是一个字段一样。所以这是一个示例WHERE语句,但我不知道可能使用的语法是什么。

WHERE (isset(width)?(width_override?o_width:width):o_width) = {query}

2 个答案:

答案 0 :(得分:2)

使用IF功能。

WHERE IF(width IS NOT NULL, IF(width_override, o_width, width),
                            o_width) = {query}

答案 1 :(得分:2)

我认为你正在寻找COALESCE():

SELECT COALESCE(overridden_width_col, automatic_width_col) width
  FROM yourtable
 WHERE COALESCE(overridden_width_col, automatic_width_col) = %param

COALESCE()将返回第一个非NULL参数。 overridden_​​width_col设置为NULL,它将使用automatic_width_col。