2013-06-11 7 views
0

Я пытаюсь написать запрос для mysql (Search Module), где я столкнулся с трудностями из-за операции выбора, выполняемой внутри той же таблицы.SELECT .. SELECT в Mysql

Мой запрос:

(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, AND Операция может быть изменена в зависимости от ситуации.
  3. Это зависит от пользователя, как ему нужно искать.

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

Проверьте мою попытку: MySQL IN BETWEEN with no condition Doctrine Query from Mysql Select Query with OR and NAND

ответ

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-е условие НОР третье условие) ИЛИ (4-е условие типа NAND пятое условие).

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

+1

но он не работает для И-операции между запросами. – TomPHP

+1

Ссылка на операции NAND и NOR была моим предыдущим вопросом, где я могу выполнить операции, но когда он приходит с несколькими запросами, он не работает ... – TomPHP

+1

Помогите я с этим для запроса .. – TomPHP