sql 如何实现在条件为空时查询全部数据??

2017-08-16 14:40:41 +08:00
 shaweren

$query="select * from ent_data WHERE company LIKE '%$q%' AND state LIKE '%$state%' AND class LIKE '%$class%' and fid='$fid'";

前面用模糊查询都可以为空,但 fid 这里又必须要求准确。但这样查询条件就不能留空,怎么破?

5891 次点击
所在节点    PHP
15 条回复
macwhirr
2017-08-16 14:44:20 +08:00
前边加个判断
shaweren
2017-08-16 14:46:39 +08:00
@macwhirr 因为类似这种需要留空的字段有好几个,用判断就太复杂了
silencefent
2017-08-16 14:49:26 +08:00
用三目运算符判断也不费多少事
shaweren
2017-08-16 14:58:41 +08:00
@silencefent
$query. = isset($fid) ? 'and fid='$fid'' : ''; 我是这么写的,但是好像不行,不知道是哪里的问题。
annielong
2017-08-16 15:04:36 +08:00
加判断后,如果不为空,就$query=$query+“ and fid='$fid' ”,目前都是这样处理的
rocksolid
2017-08-16 15:07:41 +08:00
难道不是 where 1=1 加上后面么
AnonymousAccout
2017-08-16 15:11:08 +08:00
ls 加一,java 党表示用原生 jdbc 手写 sql 练就了一身各种姿势拼接 sql 语句的本领
shaweren
2017-08-16 15:15:59 +08:00
if($fid>0){
$query=$query."and fid='$fid'";
}else{
};

用这种方式解决的..
ZhLTE
2017-08-16 16:00:08 +08:00
where 1=1
noNOno
2017-08-16 16:14:01 +08:00
select * from ent_data WHERE
case
when company LIKE '%$q%' AND state LIKE '%$state%' AND class LIKE '%$class%' and fid='$fid'
then 1
when fid is null
then 1
else 0
end =1
silencefent
2017-08-16 16:24:33 +08:00
@shaweren
$query = isset($fid) ? 'and fid='.$fid : ' ';
仔细检查,连接符
reus
2017-08-16 16:29:28 +08:00
还拼接 SQL ?都什么时代了

CASE WHEN $fid <> '' THEN fid = $fid ELSE true END
cxbig
2017-08-16 20:21:54 +08:00
用 ORM 组件,有值的条件才放 where 里。
jatesun
2017-08-17 11:59:11 +08:00
提前校验过滤空值
WheatField
2017-09-06 21:53:16 +08:00
@cxbig 我也觉得如此

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

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

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

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

© 2021 V2EX