MySQL使用where子句

时间:2019-02-09 20:38:43

标签: mysql mysqli where-clause where-in

我有一个mysql查询,它用于引发某些事件。 event_type和etype将根据某人在表单中选择的内容而改变。 以下是根据网页上的表单添加到查询中的内容。

  

and event_type ='54'和etype ='SP'

完整查询为

select tevent.event_name, tevent.event_type, min(e_dates.event_date) as eventdate,  
       tevent.status, tevent.etype 
from (tevent LEFT JOIN event_dates on tevent.eventid=event_dates.eventid) 
Where status <> 'delete' 
AND YEAR(e_dates.event_date) >= YEAR( CURDATE( ) ) and event_type = '54' and etype = 'SP')  
group by tevent.eventid 
order by (case when tevent.status = 'closed' and e_dates.event_date >= curdate() then 0 else 1 end), 
         (case when find_in_set(`status`, 'open,pending,approved') then 0 else 1 end), 
         e_dates.event_date asc, tevent.eventid ASC

这完全可以满足我的需求。我将显示属于特定事件类型和事件类别的所有事件。

enter image description here

但是,我希望所有查询都包含以下语句

  

((event_type ='54'和etype ='SM')或(event_type ='50'和   event_prelim ='2'))

enter image description here

以上声明会将研讨会添加到所有事件日历中,但也会根据人员的选择显示每种特定的事件类型。

我希望我的解释不会引起混淆。

1 个答案:

答案 0 :(得分:2)

我想您的WHERE子句可能看起来像这样

WHERE status <> 'delete' 
  AND YEAR(e_dates.event_date) >= YEAR(CURDATE()) 
  AND (
         event_type NOT IN ('50','54')
      OR event_type IS NULL
      OR (event_type = '54' AND etype IN ('SP','SM')) 
      OR (event_type = '50' AND event_prelim = '2')
  )

AND的值先于OR的值。
因此,在条件中同时使用AND和OR时,放在括号中确实很重要。