ВЫБРАТЬ.. ВЫБРАТЬ в Mysql
Я пытаюсь написать запрос для MySQL (Search Module)
где я сталкиваюсь с трудностями из-за операции выбора, которая будет выполняться внутри той же таблицы.
Мой запрос:
(SELECT * FROM user WHERE `user_name` like '%TOM%' OR `user_name` like '%AN%'
and `login_datetime` BETWEEN '2013-01-01 00:00:00' and '2013-02-31 23:59:59')
OR
(SELECT * FROM user WHERE `user_name` like '%PHP%' OR `user_name` like '%BA%'
and `login_datetime` BETWEEN '2013-02-01 00:00:00' and '2013-03-31 23:59:59')
AND
(SELECT * FROM user WHERE `user_name` like '%SUN%' OR `user_name` like '%MOON%'
and `login_datetime` BETWEEN '2013-03-01 00:00:00' and '2013-04-31 23:59:59')
NAND
(SELECT * FROM user WHERE `user_name` like '%RAJ%' OR `user_name` like '%MUTH%'
and `login_datetime` BETWEEN '2013-04-01 00:00:00' and '2013-06-31 23:59:59')
NOR
(SELECT * FROM user WHERE `user_name` like '%BAG%' OR `user_name` like '%LAP%'
and `login_datetime` BETWEEN '2013-05-01 00:00:00' and '2013-07-31 23:59:59')
Вышеупомянутый запрос - мой сценарий. Где это не может быть изменено, я пытаюсь написать Запрос для этого.
Замечания:
- Вышеуказанный запрос выполняется в одной таблице.
- ОперацииOR, NAND, NOR и AND могут быть взаимозаменяемы в зависимости от ситуации.
- Это зависит от пользователя, как он должен искать.
Я пробовал много способов достичь логики, но я сталкиваюсь с проблемами на всех этапах.
Проверьте мою попытку: MySQL ВНУТРИ без условия Doctrine Query from Mysql Выберите Query with OR и NAND
1 ответ
Операции NAND и NOR могут быть выполнены в SQL следующим образом: ссылка
Просто отредактируйте следующий запрос по мере необходимости.
SELECT * FROM user WHERE
(`user_name` like '%TOM%' OR `user_name` like '%AN%' and `login_datetime` BETWEEN '2013-01-01 00:00:00' and '2013-02-31 23:59:59') OR
NOT ( --NOR
(`user_name` like '%PHP%' OR `user_name` like '%BA%' and `login_datetime` BETWEEN '2013-02-01 00:00:00' and '2013-03-31 23:59:59') OR
(`user_name` like '%SUN%' OR `user_name` like '%MOON%' and `login_datetime` BETWEEN '2013-03-01 00:00:00' and '2013-04-31 23:59:59')
) OR
NOT ( --NAND
(`user_name` like '%RAJ%' OR `user_name` like '%MUTH%' and `login_datetime` BETWEEN '2013-04-01 00:00:00' and '2013-06-31 23:59:59') AND
(`user_name` like '%BAG%' OR `user_name` like '%LAP%' and `login_datetime` BETWEEN '2013-05-01 00:00:00' and '2013-07-31 23:59:59')
)
В вышеприведенном примере возвращаются все записи, где условие между первыми скобками является истинным ИЛИ (2-е условие, НЕ 3-е условие) ИЛИ (4-е условие, НЕ 5-е условие).
ПРИМЕЧАНИЕ: условие относится к пунктам в скобках.