shaweren
V2EX  ›  PHP

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

  •  
  •   shaweren · Aug 16, 2017 · 6826 views
    This topic created in 3233 days ago, the information mentioned may be changed or developed.

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

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

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

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

    CASE WHEN $fid <> '' THEN fid = $fid ELSE true END
    cxbig
        13
    cxbig  
       Aug 16, 2017 via iPad
    用 ORM 组件,有值的条件才放 where 里。
    jatesun
        14
    jatesun  
       Aug 17, 2017
    提前校验过滤空值
    WheatField
        15
    WheatField  
       Sep 6, 2017
    @cxbig 我也觉得如此
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2984 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 15:03 · PVG 23:03 · LAX 08:03 · JFK 11:03
    ♥ Do have faith in what you're doing.