0

(Search Module)同じテーブル内で選択操作を実行するために問題に直面している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 条件なし Doctrine Query from Mysql Select Query with OR and NAND

4

1 に答える 1

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

上記の例では、最初の括弧の間の条件が true OR (2 番目の条件 NOR 3 番目の条件) OR (4 番目の条件 NAND 5 番目の条件) であるすべてのレコードが返されます。

:条件とは、括弧内の句を指します。

于 2013-06-11T12:39:25.397 に答える