看到别人写 SQL 会在 where 后面写 1=1,是什么意思?

2016-09-02 11:46:49 +08:00
 KagamineLenKai2

SELECT * FROM operation_log o
where 1=1
and o.operation_time>='2016/6/1'
and o.operation_time<'2016/7/28'
这个 1=1 好像写不写都没关系哦?

21966 次点击
所在节点    MySQL
77 条回复
yatesun
2016-09-02 11:51:38 +08:00
感觉主要是有些人喜欢拼接 sql ,这样能保证一定有个 where 字段,其实没什么意义。
solaya
2016-09-02 11:53:38 +08:00
就是为了加 and   拼接 sql 语句
tabris17
2016-09-02 11:55:49 +08:00
为了拼接方便
php230
2016-09-02 11:57:21 +08:00
拼接条件
wyntergreg
2016-09-02 12:01:12 +08:00
楼上说的都对,跟 2=2 没什么区别,为了语法凑字数用的。如果不加这个 1=1 ,那么在拼 sql 的时候你要判断拼上去的第一个条件是不带 and 的,然而很多查询都是多条件组合查询的,你并不知道哪一个条件会拼在第一个上,所以干脆把第一个条件写成 sql 认为的"true",其他所有条件都是 and
est
2016-09-02 12:03:08 +08:00
知道真像的我。。。。😂

没有 ORM 你么肿么活下来的。。。
KagamineLenKai2
2016-09-02 12:09:45 +08:00
抱歉刚接触 SQL ,你们说的没听懂……
SELECT * FROM operation_log o
where o.operation_time>='2016/6/1'
and o.operation_time<'2016/7/28'
这样写不也可以么?
tmkook
2016-09-02 12:13:14 +08:00
$sql = "SELECT * FROm table WHERE 1=1":
if($_GET['filed1']){
$sql .= "AND filed1=1":
}
if($_GET['filed2']){
$sql .= "AND filed2=2":
}

哈哈哈,曾经也是玩的很溜的
caixiexin
2016-09-02 12:13:49 +08:00
一般是这个方法里的 SQL 是根据入参动态生成的,比如有多个条件,这些条件又不是必填,那就在 where 1=1 ,后面接多个 and xxx 就行了。不然要是哪天 where 条件的参数变了,还要改 where xxx 。
where 1=1 MySQL 查询分析器会自动优化,没有性能问题。
Clarencep
2016-09-02 12:20:25 +08:00
都是不会用 implode 的程序猿惹的祸
ijustdo
2016-09-02 12:33:04 +08:00
我看到都蛋疼 不说 直接上代码

$conditions_str = implode(',', array_map(function($x){return sprintf('%s=:%s', $x, $x);}, array_keys($conditions)));
if (!empty($conditions_str)){
$conditions_str = " where {$conditions_str} ";
}
liqingcan
2016-09-02 12:35:40 +08:00
有人发现了吗。在座的发代码出来的全都是 phper
ijustdo
2016-09-02 12:41:24 +08:00
呵呵 我不是咧 主营不是拍好 p 我只是看到上面都用 php 举例子 也就去翻了下以前的代码
flydogs
2016-09-02 13:19:49 +08:00
1.不需要判断有没有条件
2.不需要判断第一个条件还是第 N 个条件
Infernalzero
2016-09-02 13:23:37 +08:00
@liqingcan 因为 java 的话用 mybatis 会自动帮你去掉多余的 and 所以根本不需要写 1=1 去拼接
ebony0319
2016-09-02 13:34:29 +08:00
这个是为了保持语法正确,比如有很多文本框 txt ,但是不能保证用户都输入数值。比如
temp="select * from a where 1=1"
if txt<>"" then
temp=temp+"and id=" +txt

手机写的,大概就是这个意思。
yueyoum
2016-09-02 14:38:35 +08:00
上面说 为了拼接 SQL 方便的, 其实是 那个程序员太懒,太 LOW 而已。

1 , 为何不用 ORM ?
2 , 就算不用 ORM , 拼接那些 SQL 很难?
jydeng
2016-09-02 14:49:50 +08:00
因为懒的判断。
mringg
2016-09-02 14:59:43 +08:00
我也挺喜欢用这种拼接 sql 的方式 进行查询,非常方便,但是得注意安全性问题
linescape
2016-09-02 15:17:12 +08:00
@yueyoum
1.ORM 底层也是拼 sql
2.复杂的多表联查, ORM 就蛋疼了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/303424

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX