shaweren
V2EX  ›  PHP

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

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

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

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