ВЫБЕРИТЕ.. ВЫБЕРИТЕ в 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')

Вышеупомянутый запрос - это мой сценарий. Если это нельзя изменить, я пытаюсь написать для этого запрос.

Примечание:

  1. Приведенный выше запрос выполняется в одной таблице.
  2. Операции OR, NAND, NOR и могут быть заменены в зависимости от ситуации.
  3. Это зависит от пользователя, как ему нужно искать.

Я пробовал много способов достичь логики, но я сталкиваюсь с проблемами на всех этапах.

Проверьте мою попытку: MySQL IN BETWEEN без условий Запрос доктрины из Mysql Выберите запрос с ИЛИ и НЕ-И


person DonOfDen    schedule 11.06.2013    source источник


Ответы (1)


Операции NAND и NOR можно выполнять в SQL следующим образом: link

Просто отредактируйте следующий запрос по мере необходимости.

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-е условие).

ПРИМЕЧАНИЕ: условие относится к предложениям в скобках.

person LuigiEdlCarno    schedule 11.06.2013
comment
Ссылка на операции NAND и NOR была моим предыдущим вопросом, где я могу выполнить операции, но когда речь идет о нескольких запросах, она не работает... - person DonOfDen; 11.06.2013
comment
Можете ли вы помочь мне преобразовать этот MySQL в Doctrine.. Structure. - person DonOfDen; 11.06.2013