search

Home  >  Q&A  >  body text

sql多条件查询

要实现多条件查询 其中值为0时为不限条件 怎么用sql实现

例如:查询某地区某类型商铺 有可能地区为不限 类型为中餐 查询时就不需要where 地区=值,而是只有where 类型=中餐,选择地区为北京 类型为中餐 查询时就是where 地区=北京 AND 类型=中餐。

然后还有很多其他条件,在后端用if else判断之后再用不同的sql语句查询的话太繁琐了,不太了解sql但我觉得sql应该有相应的解决方案,求教。


高洛峰高洛峰3052 days ago866

reply all(3)I'll reply

  • 三叔

    三叔2016-11-12 11:25:15

    把查询的条件作为一个Map params; 然后用一个方法进行额外查询语句的拼接;

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    public String getWhere(Map<string, object> params) {

        String str = "";

         

        if(params.size() > 0) {

            boolean and = false;

            for(String param : params.keySet()) {

                Object value = params.get(param);

                if(value == null || value.equals(0)) {

                    continue;

                else {

                    if(and) {

                        str = str + " and " + param + " = " " " + value;

                    else {

                        and = true;

                        str = str + param + " = " " " + value;

                    }

                     

                }

            }

        }

         

        if(str != "") { 

            str = " where " + str;

        }

         

        return str;

    }</string, object>


    reply
    0
  • 欧阳克

    欧阳克2016-11-12 11:24:53

    我提供一个思路吧,题主的SQL可以这么写:

    SELECT * FROM table WHERE (0=地区值 OR 地区=地区值)AND (0=类型值 OR 类型=类型值);

    这样的话,在地区值或者类型值为0的时候,因为第一个条件已经为真,所以不判断第二个条件;如果值不为0,则判断第二个条件。如果我没理解错的话,应该可以满足题主的需求。


    reply
    0
  • 三叔

    三叔2016-11-12 11:24:32

    mybatis拼SQLJPA拼creteria

    reply
    0
  • Cancelreply