使用 NAND、NOR、NOT、AND 运算符进行多条查询

2023-12-01

我正在尝试设计一个学说查询,我对学说很陌生,但在我的另一篇文章的帮助下,我想出了一个在我的 Mysql 中运行时可以工作的查询。但我希望它能够转换 Doctrine (2.3) 中的查询,有人可以帮助我吗?

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

--链接参考:对于上面的 MySql 查询。

我的教义尝试:参考链接:

理解学说查询非常困难,因为它在查询之间自动创建了 () 黄铜,所以它总是给我一些错误的结果。请帮助我。


理解学说查询非常困难,因为它在查询之间自动创建了 () 黄铜,所以它总是给我一些错误的结果。

当您使用expr它通常将表达式包装在()。我认为这就是您遇到困惑的地方。类似于以下内容的内容应该可以工作(这尚未经过测试,因此您可能需要调整位):

$qry = $this->manager()->createQueryBuilder()
        ->from($this->entity, 'e')
        ->select('e');


// (`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')
$expr1 = $qry->expr()->andX(
    $qry->expr()->orX(
       $qry->expr()->like('e.user_name', '%TOM%'), 
       $qry->expr()->like('e.user_name', '%AN%')
    ),
    $qry->expr()->between('e.login_datetime', '2013-02-01 00:00:00', '2013-02-31 23:59:59')
);

//(`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')

$expr2a = $qry->expr()->andX(
    $qry->expr()->orX(
       $qry->expr()->like('e.user_name', '%PHP%'), 
       $qry->expr()->like('e.user_name', '%BA%')
    ),
    $qry->expr()->between('e.login_datetime', ''2013-02-01 00:00:00'', '2013-03-31 23:59:59')
);

// (`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')
$expr2b = $qry->expr()->andX(
    $qry->expr()->orX(
       $qry->expr()->like('e.user_name', '%SUN%'), 
       $qry->expr()->like('e.user_name', '%MOON%')
    ),
    $qry->expr()->between('e.login_datetime', '2013-03-01 00:00:00', '2013-04-31 23:59:59')
);

// combine expr2a and expr2b with OR as $expr2

$expr2 = $qry->expr()->orX($expr2a, $expr2b);


// (`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')

$expr3a = $qry->expr()->andX(
    $qry->expr()->orX(
       $qry->expr()->like('e.user_name', '%RAJ%'), 
       $qry->expr()->like('e.user_name', '%MUTH%')
    ),
    $qry->expr()->between('e.login_datetime', ''2013-04-01 00:00:00'', '2013-06-31 23:59:59')
);

// (`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')
$expr3b = $qry->expr()->andX(
    $qry->expr()->orX(
       $qry->expr()->like('e.user_name', '%BAG%'), 
       $qry->expr()->like('e.user_name', '%LAP%')
    ),
    $qry->expr()->between('e.login_datetime', '2013-05-01 00:00:00', '2013-07-31 23:59:59')
);

// combine expr2a and expr2b with OR as $expr2

$expr3 = $qry->expr()->andX($expr3a, $expr3b);


// final query essentially WHERE expr1 OR NOT(expr2) OR NOT(expr3)
$qry->where($expr1)
    ->or($qry->expr()->not($expr2))
    ->or($qry->expr()->not($expr3));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 NAND、NOR、NOT、AND 运算符进行多条查询 的相关文章

随机推荐

  • Eclipse 查找哪些文件引用了这个 jar

    我们有很多罐子 这些罐子是多年来添加到项目中的 但它们的使用情况尚未在任何地方记录 我想找出 java 或 jsp 文件中 jar 中任何类的引用 现在 对于我们的新 jars 我们没有这个问题 因为我们使用 Maven 它可以帮助我们更好
  • Excel VBA - 应用自动过滤器并按特定颜色排序

    我有一个自动过滤的数据范围 自动过滤器是由以下 VB 代码创建的 Sub Colour filter Range A4 Select Range Selection Selection End xlToRight Select Range
  • 如何给出有空间的枚举值

    我必须创建一个包含有空格的值的枚举 public enum MyEnum My cart Selected items Bill 这是给出错误 使用连接词 如MyCart或使用下划线My Cart不是一个选择 请指导 提前致谢 From 枚
  • PyMC3 Dirichlet 过程多元高斯混合模型

    我无法让我的形状适用于狄利克雷过程高斯混合模型 我的数据observations有形状 number of samples number of dimensions 每个高斯均值应从各向同性先验中得出 每个高斯协方差应为单位矩阵 我以为我设
  • mongodb 中单个查询的多个计数

    我是 Mongo Db 的新手 希望获得有关此查询的帮助 在过去的几天里 我一直在筛选这里的帖子 撕扯着我的头发 看看是否能找到与我的查询相关的任何内容 但没有运气 我有一个结构类似于以下文档的集合 id xyz Movieid 123 M
  • 使用 leiningen 时出现 ExceptionInInitializerError

    我是一个刚开始使用 Clojure 和 Leiningen 的初学者 在尝试使用各种 lein 命令时遇到了问题 虽然 lein deps工作正常 当我尝试使用时 lein plugin install
  • 当密码包含特殊字符时,“用户访问被拒绝”[重复]

    这个问题在这里已经有答案了 我几天来一直在搜索 SO 和网络 试图解决这个问题 SO 有很多类似的问题 但它们似乎都不是我目前正在处理的同一问题 我正在尝试使用 python 连接到远程 MySQL 数据库 以使用 pandas to sq
  • 为什么Python不使用^来表示数字的平方而是使用**来表示? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我见过的一些语言使用了 符号 并且它似乎没有为 Python 中的任何东西保留 这也让我感到困惑 因为 符号 非常 众所周知 Python 应该很容易使用 但使用 这有什么合乎逻辑的
  • java中的对象排序

    我想做嵌套排序 我有一个课程对象 其中有一组应用程序 应用程序具有时间和优先级等属性 现在我想首先根据优先级对它们进行排序 在优先级内我想按时间对它们进行排序 例如 给定此类 公共字段仅为了简洁起见 public class Job pub
  • 制作 X 与 Y 的图表

    我在 x 中有一些点 在 y 中有其他点 我正在尝试制作一个如图所示的图表 我希望创建的图表的点可以连接起来 在 c3 js 中 我不知道如何绘制 X 与 Y 的关系 我怎样才能实现像我的照片这样的效果 https jsfiddle net
  • pip 无法正确解决子/孙依赖关系

    我有一个模块的依赖关系树 其工作原理如下 表示依赖关系 a b c b ruamel yaml gt 0 16 5 c ruamel yaml lt 0 16 6 gt 0 12 4 我很清楚 ruamel yaml0 16 5将正确解决这
  • 如何轻松处理方向变化

    我正在开发一个以编程方式添加每个视图的 Android 应用程序 当用户转动屏幕时 我只想再次显示填写的值 有没有一种简单的方法让 Android 自动执行此操作 我的应用程序是完全动态的 因此它没有预定的布局 这使得它变得更加困难 那么
  • 为什么我们需要“nil”?

    我不明白为什么我们需要nil 1 何时cons项目序列 所谓的正确列表 在我看来 我们可以通过使用所谓的不正确列表来实现相同的目标 cons ed 对没有结尾nil 独自的 由于 Lisps 2 已经提供了一个原始过程来区分pair 和一个
  • 获取列表视图默认单击颜色,具体取决于设备

    在我的 Android 应用程序中 我使用列表视图和一些用户可以单击的线性布局 当然 我必须将 LinearLayout 的背景设置为 xml 文件 其中定义了所声明的按下 选择的内容 myView setBackgroundDrawabl
  • 如何通过 API 访问 Hadoop 计数器值?

    在 Hadoop 中 我们可以在 Map Reduce 任务中递增计数器 如下所示 context getCounter MyCountersEnum SomeCounter increment 1 您可以在日志中找到它们的值 作业完成后如
  • 流畅的 NHibernate 和计算属性

    我正在使用 Fluent NHibernate 并自动映射类 我在一个类中有一个计算属性 类似于 public virtual DateTime LastActionTimeStamp get return Actions Count 0
  • 获取oracle.jdbc.driver.LogicalConnection,需要oracle.jdbc.OracleConnection

    我正在尝试连接到在 WebSphere 上运行的 Java 应用程序内的 Oracle 数据库 我需要能够创建一个数组描述符以在调用过程中使用 代码如下所示 Connection conn null ArrayDescriptor arra
  • 如何整理 WinApi 函数的返回值?

    Simple 我怎么能够明确编组WinAPi 函数的结果 I know how to marshal parameters of WinApi functions in C but how can I also marshal the re
  • ListBox 项目可以跨多行吗? C# [重复]

    这个问题在这里已经有答案了 我想要一个 ListBox 控件包含跨多行的项目 本质上我想要的是每个项目跨越多行并且可以作为一个项目选择 有没有办法做到这一点 正如建议的LarsTech在他的评论中 所有其他评论都会导致某种完全编码的示例 这
  • 使用 NAND、NOR、NOT、AND 运算符进行多条查询

    我正在尝试设计一个学说查询 我对学说很陌生 但在我的另一篇文章的帮助下 我想出了一个在我的 Mysql 中运行时可以工作的查询 但我希望它能够转换 Doctrine 2 3 中的查询 有人可以帮助我吗 MySQL 查询 SELECT FRO