今天,小杰问俺,为啥好多的mysql语句中,都存在 where 1 这样的判断条件,出于直觉,我感觉这是一条为程序服务的方法!因为平时我也不用这样,因为我自认为比较注重程序的执行效率,怎么可能会加上这么多余的一句来影响程序的执行速度呢?虽然我曾在phpmyadmin中看过程序给过这样的写法,但是当时并没有太在意!
既然有人问到,我也就来了兴趣,我兴冲冲的冲向了mysql手册(官方的在线版本),但是一看到手册我茫然了,手册会告诉你这些的么?失望而归,又冲向百度,百了半天没百出个所以然来!没办法出杀手锏----谷歌,啥关键词? 直接就是一 “where 1=1” 结果出现“南方健康网--体验健康新生活!”“1+1家教广州家教中心-广州家教网”类似云云,就在准备放弃之时看到“SQL语句中巧用WHERE 1=1”,进去一看,明白了一些!加入where 1 这样的判断条件的确是为了程序的书写服务的!下面我们说说这样的好处吧!
where 1 其实是程序中可能需要多条判断的接口!
例如:
if(condition1) $sql1 = "and `condition1` = '."$condition1."'";
if(condition2) $sql2 = "and `condition2` = '."$condition2."'";
if(condition3) $sql3 = "or `condition3` = '."$condition3."'";
如果我们使用这样的查询 "select * from table where ".$sql1.$sql2.$sql3.";
这样的语句就不容易维护,而且如果处理不好 sql中的and 语句就出错了!
而当我们使用这样的查询时 "select * from table where 1".$sql1.$sql2.$sql3.";
实际得出的结果就可能会是(如果以上$condition1~3都满足!):
"select * from table where 1 and `condition1` = '."$condition1."' and `condition2` = '."$condition2."' or `condition3` = '."$condition3."';
这样的话,程序中的mysql语句是不是就很容易维护呢?
至于数据库查询性能与可维护性,语句的简易性相比,你选择如何,那就是仁者见仁,智者见智的问题了!


