【问题标题】:Mysql Query : filter with conditionMysql 查询:按条件过滤
【发布时间】:2016-05-22 20:55:35
【问题描述】:

我有一个表 Orders(OID, OrderType, ODep, ReqUser)

我想过滤如下逻辑:

SELECT * FROM Orders if  (Ordertype='confidential') filter by ReqUser='$UserID'  else filter by ODep

我不确定这是否可能!

【问题讨论】:

    标签: php mysql sql filter


    【解决方案1】:

    在这些情况下,您通常可以将if a then b else c 替换为(a AND b) OR ((NOT a) AND c),如下所示:

    SELECT * 
    FROM Orders 
    WHERE (Ordertype='confidential' AND ReqUser='$UserID')
       OR (Ordertype<>'confidential' AND ODep)
    ;
    

    或者,根据您的数据,这也可能有效:

    SELECT * 
    FROM Orders 
    WHERE ReqUser='$UserID'
       OR (Ordertype<>'confidential' AND ODep)
    ;
    

    或者这个:

    SELECT * 
    FROM Orders 
    WHERE ODep AND (ReqUser='$UserID' OR Ordertype <> 'confidential')
    ;
    

    【讨论】:

    • 不行,如果请求的 ReqUser 不存在怎么办?
    • @dnoeth 然后它将根据 ODep 的计算结果进行过滤。
    • 您可能希望在第二个 OR 条件中包含一个 Ordertype&lt;&gt;'confidential' 子句。
    • @Marvin 说得好,我猜这可能是更理想的结果......更正。
    猜你喜欢
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 2015-10-28
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多