2013-06-11 2 views
0

동일한 테이블 내에서 수행 할 선택 작업으로 인해 어려움에 처한 mysql (Search Module)에 대한 쿼리를 작성하려고합니다.SELECT .. SELECT in 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 그냥 다음 쿼리를 편집 할 수 있습니다. 첫 번째 parenthesises 사이의 조건이 참 OR (2 조건 NOR 3 조건) 또는 (4 상태 NAND 5 조건)입니다 모든 레코드가 반환 위의 예에서

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') 
) 

.

참고 : 조건은 괄호 사이의 절을 말합니다.

+1

하지만 쿼리간에 AND 연산이 작동하지 않습니다 .. – TomPHP

+1

NAND 및 NOR 연산 링크는 이전의 질문 이었지만 여러 쿼리를 사용할 때 작동하지 않을 수 있습니다 ... – TomPHP

+1

도움을 주실 수 있습니까? 그 질문에 대한 저와 함께 .. – TomPHP