利用“|”和“&”简化查询

1.多个字段相同查询条件下用“&”处理


例如该情况:

$model = M('Test');
$cond['T_StringA'] = 'test';
$cond['T_StringB'] = 'test'; $returnData = $model->where($cond)->select();

这样的写法下,查询条件最终的执行的sql是:

 SELECT * FROM `test` WHERE `T_StringA` = `test` AND `T_StringB` = `test`;

是直接将两个条件用“And”连接起来,返回最终数据是表数据中同时满足两个条件的值。

在条件较少,以及条件的内容较简单时,用这样的方法写起来的代码也不会很长,但如果你对代码长度有要求的话,用’&‘直接在查询条件的字段中拼接的话,就更为简便了。



例如该情况,查询字段较多时

$model = M('Test');
$cond['T_StringA'] = 'test';
$cond['T_StringB'] = 'test';
$cond['T_StringC'] = 'test';
$cond['T_StringD'] = 'test'; $returnData = $model->where($cond)->select();

$cond 直接用一下写法就可。

 $cond['T_StringA&T_StringB&T_StringC&T_StringD'] = 'test';
$returnData = $model->where($cond)->select();

这样的写法下,查询条件最终的执行的sql是:

SELECT * FROM `test` WHERE `T_StringA` = `test` AND `T_StringB` = `test` AND `T_StringC` = `test` AND `T_StringD` = `test`;

实际上和你想要的效果是一样的,只是说有需要的话,做个简单的处理,会少些一些代码。当然这样的场景应该也不会很多的。那如果是用在多表链接查询时,就不建议用该方法了,消耗太大。

但是如果你是想获取满足该条件中的一个的数据,那就得用"OR"



2.多个字段不相同查询条件下用“|”处理

 $model = M('Test');

 $cond['T_StringA'] = 'test';

 $cond['T_StringB'] = 'test';

 $cond['_logic'] = 'OR';
$returnData = $model->where($cond)->select();
<br>

这样的写法下,查询条件最终的执行的sql是:

 SELECT * FROM `test` WHERE `T_StringA` = `test` OR `T_StringB` = `test`;

以前我还用过这样的方式拼接过,执行的sql时一样的啦,只是自己做的拼接,哈哈,不过是很low的啦。

$model = M('Test');
$cond['_string'] = ' T_StringA=\''.'test'.'\' OR T_StringB=\''.'test'.'\'';
$returnData = $model->where($cond)->select();

如下用“|”处理,会少几行代码了

$model = M('Test');

$cond['T_StringA'] = 'test';

$cond['T_StringB'] = 'test';

$cond['T_StringC'] = 'test';

$cond['T_StringD'] = 'test';
$returnData = $model->where($cond)->select(); $cond 也是同上直接用一下写法就可。
$cond['T_StringA|T_StringB'] = 'test'; $returnData = $model->where($cond)->select();

3.其实 && 和 || 在PHP中很多场景都会用到,类似于做条件判断,就利用它们的原理来代替if判断,会简洁许多。

if ($test) {
$cond['T_StringA'] = $test;
} $test && $cond['T_StringA'] = $test;

顺便提一下,PHP 中 AND 和 OR ,&& 和 || 之间,本身代表的意思是没有区别的,但是有时候会涉及到运算符优先级。在网上看到一个例子如下:
因为赋值运算的优先级比AND和OR的高,所以先赋值;比&&和||的低,所以逻辑运算符先执行,先逻辑运算,再赋值。

<br>

$p = 6 or 0;
var_dump($p);//int(6) $p = 6 || 0;
var_dump($p);//bool(true) $p = 6 and 0;
var_dump($p); //int(6) $p = 6 && 0;
var_dump($p); //bool(false)

用 | 和 & 简化查询的更多相关文章

  1. Expression Trees 参数简化查询

    ASP.NET MVC 引入了 ModelBinder 技术,让我们可以在 Action 中以强类型参数的形式接收 Request 中的数据,极大的方便了我们的编程,提高了生产力.在查询 Action ...

  2. ASP.NET MVC:Expression Trees 作为参数简化查询

    ASP.NET MVC 引入了 ModelBinder 技术,让我们可以在 Action 中以强类型参数的形式接收 Request 中的数据,极大的方便了我们的编程,提高了生产力.在查询 Action ...

  3. LinQ实战学习笔记(三) 序列,查询操作符,查询表达式,表达式树

    序列 延迟查询执行 查询操作符 查询表达式 表达式树 (一) 序列 先上一段代码, 这段代码使用扩展方法实现下面的要求: 取进程列表,进行过滤(取大于10M的进程) 列表进行排序(按内存占用) 只保留 ...

  4. oracle 10g 学习之多表查询、分组函数(6)

    笛卡尔集 l  笛卡尔集会在下面条件下产生: 省略连接条件 连接条件无效 所有表中的所有行互相连接 l  为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件. 自连接 select m.las ...

  5. thinkphp where()条件查询

    今天来给大家讲下查询最常用但也是最复杂的where方法,where方法也属于模型类的连贯操作方法之一,主要用于查询和操作条件的设置.where方法的用法是ThinkPHP查询语言的精髓,也是Think ...

  6. (转)MySQL数据表中带LIKE的字符匹配查询

    MySQL数据表中带LIKE的字符匹配查询 2014年07月15日09:56    百科369 MySQL数据表中带LIKE的字符匹配查询 LIKE关键字可以匹配字符串是否相等. 如果字段的值与指定的 ...

  7. Oracle_关联查询

    1. 等值连接(Equijoin).非等值连接(Non-Equijoin).外连接(Outer join):-->左外连接-->右外连接.自连接(Self join) 交叉连接(Cross ...

  8. THINKphp中复杂的查询

    字符串拼接查询 案例一:拼接字符串(多条件查询) $where = ''; //定义字符串,用于拼接满足条件的数据字段 $value = []; // 定义空数组,用于接收值 if(!empty($n ...

  9. ThinkPHP 数据库操作(四) : 聚合查询、时间查询、高级查询

    聚合查询 在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数.所有用户的最大积分.用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括: 用法示例: ...

随机推荐

  1. Google C++测试框架系列入门篇:第二章 开始一个新项目

    上一篇:Google C++测试框架系列入门篇:第一章 介绍:为什么使用GTest? 原始链接:Setting up a New Test Project 词汇表 版本号:v_0.1 开始一个新项目 ...

  2. python代码检查工具pylint 让你的python更规范

    1.pylint是什么? Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅 ...

  3. shell多线程(3)while循环

    start="2018-06-17" end="2018-07-01" min=`date -d "${start}" +%Y%m%d` m ...

  4. 从零开始实现放置游戏(七)——实现挂机战斗(5)RMS系统后台参数校验

    前面几章实现了在RMS系统中进行数据的增删查改以及通过Excel批量导入.但仍有遗留的问题,比如在新增或编辑时,怪物的生命值.护甲等数据我们可以输入负值,这种数据是不合理且没有意义的.本章我们就实现服 ...

  5. 【数据结构】红黑树-Java实现

    WIKI:https://en.wikipedia.org/wiki/Red%E2%80%93black_tree 转:红黑树(五)之 Java的实现 总结的比较精炼的: http://www.cnb ...

  6. 与 MySQL 因“CST” 时区协商误解导致时间差了13 小时

    CST 时区名为 CST 的时区是一个很混乱的时区,有四种含义: 美国中部时间 Central Standard Time (USA) UTC-05:00 / UTC-06:00 澳大利亚中部时间 C ...

  7. 基于STM32之UART串口通信协议(一)详解

    一.前言 1.简介 写的这篇博客,是为了简单讲解一下UART通信协议,以及UART能够实现的一些功能,还有有关使用STM32CubeMX来配置芯片的一些操作,在后面我会以我使用的STM32F429开发 ...

  8. 苹果二代TWS无线耳机AirPods调研

    产品介绍 苹果AirPods二代自从2018年9月份上市以来,到现在将近一年的时间了,据江湖传闻,苹果AirPods的总售卖个数,已经超过了5000W部,这样价格的TWS耳机,能够卖那么多的量,估计也 ...

  9. Thinkphp5.0之异常处理

    1.默认异常处理在调试模式下,系统默认展示的错误页面:请输入图片描述 异常处理接管 1.修改config.php 'app_debug' => false,2.在配置文件里添加如下代码 // 异 ...

  10. 基于Dapper的开源Lambda扩展LnskyDB 2.0已支持多表查询

    LnskyDB LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼. 文档地址: https://lining ...