且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

MYSQL中的条件where子句

更新时间:2021-12-11 03:20:09

只要使用足够的括号,就可以使用ANDOR进行此操作.

You can do this with AND and OR as long as you use sufficient parentheses.

我还假设activities.OrderBy可以为null.如果不是这种情况,则可以删除null检查:

Also I'm assuming that activities.OrderBy can be null. If that's not the case you can remove the null check:

SELECT activities.*, 
       activitytypes.orderby 
FROM   activities 
       LEFT OUTER JOIN activitytypes 
                    ON activities.typeid = activitytypes.typeid 
WHERE  activities.userid = 86 
       AND activities.typeid NOT IN ( 5, 10, 11, 12, 19 ) 
       AND ( ( activities.orderby = 1 
               AND activities.starttime >= '2013-08-26 04:00:00' 
               AND activities.endtime <= '2013-08-27 04:00:00' ) 
              OR ( ( activities.orderby IS NULL 
                      OR activities.orderby != 1 ) 
                   AND activities.activitydate = '2013-08-26' ) ) 
ORDER  BY activitytypes.orderby, 
          activities.starttime 

或者,如果您仍然想使用CASE,则只需使用END关闭CASE语句,如下所示:

Alternatively, if you still want to use CASE, you just need to close your CASE statement using END, like this:

SELECT          activities.*, 
                activitytypes.orderby 
FROM            activities 
LEFT OUTER JOIN activitytypes 
ON              activities.typeid = activitytypes.typeid 
WHERE           activities.userid = 86 
AND             activities.typeid NOT IN ( 5, 
                                          10, 
                                          11, 
                                          12, 
                                          19 ) 
AND             ( 
                                CASE 
                                                WHEN activities.orderby = 1 THEN activities.starttime >= '2013-08-26 04:00:00' 
                                                AND             activities.endtime <= '2013-08-27 04:00:00' 
                                                ELSE activities.activitydate = '2013-08-26' 
                                end ) 
ORDER BY        activitytypes.orderby, 
                activities.starttime