Mysql, выбирающий несколько полей, используя в где предложение - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть запрос MySQL, и он используется для вызова определенных событий.Event_type и etype будут меняться в зависимости от того, что кто-то выберет в форме.Ниже приводится то, что добавляется в запрос на основе формы на веб-странице.

и 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 голосов
/ 10 февраля 2019

Полагаю, ваше предложение 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')
  )

И вычисляются перед ИЛИ.
Так что при использовании в критериях и И, и ИЛИ значение круглых скобок имеет значение.

...