使用 in where 子句选择多个字段
selecting multiple fields using in where clause
我有一个 MySQL 查询,它用于引发某些事件。 event_type 和 etype 将根据某人在表单中的选择而改变。
以下是根据网页上的表单添加到查询中的内容。
and event_type = '54' and 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
这完全符合我的需要。我显示的是特定事件类型和事件类别的所有事件。
但是,我希望所有查询都包含以下语句
((event_type = '54' and etype = 'SM') or (event_type = '50' and
event_prelim = '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 时,放置括号很重要。
我有一个 MySQL 查询,它用于引发某些事件。 event_type 和 etype 将根据某人在表单中的选择而改变。 以下是根据网页上的表单添加到查询中的内容。
and event_type = '54' and 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
这完全符合我的需要。我显示的是特定事件类型和事件类别的所有事件。
但是,我希望所有查询都包含以下语句
((event_type = '54' and etype = 'SM') or (event_type = '50' and event_prelim = '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 时,放置括号很重要。