V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shaweren
V2EX  ›  PHP

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

  •  
  •   shaweren · 2017-08-16 14:40:41 +08:00 · 6006 次点击
    这是一个创建于 2658 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    用这种方式解决的..
    ZhLTE
        9
    ZhLTE  
       2017-08-16 16:00:08 +08:00
    where 1=1
    noNOno
        10
    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
        11
    silencefent  
       2017-08-16 16:24:33 +08:00
    @shaweren
    $query = isset($fid) ? 'and fid='.$fid : ' ';
    仔细检查,连接符
    reus
        12
    reus  
       2017-08-16 16:29:28 +08:00   ❤️ 1
    还拼接 SQL ?都什么时代了

    CASE WHEN $fid <> '' THEN fid = $fid ELSE true END
    cxbig
        13
    cxbig  
       2017-08-16 20:21:54 +08:00 via iPad
    用 ORM 组件,有值的条件才放 where 里。
    jatesun
        14
    jatesun  
       2017-08-17 11:59:11 +08:00
    提前校验过滤空值
    WheatField
        15
    WheatField  
       2017-09-06 21:53:16 +08:00
    @cxbig 我也觉得如此
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1850 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:28 · PVG 00:28 · LAX 08:28 · JFK 11:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.