利用“|”和“&”简化查询
1.多个字段相同查询条件下用“&”处理
例如该情况:
$model = M('Test');
$cond['T_StringA'] = 'test';
$cond['T_StringB'] = 'test';
$returnData = $model->where($cond)->select();
$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)