【问题标题】:How to fetch value from Mysql table using multiple condition with optional value如何使用具有可选值的多个条件从 Mysql 表中获取值
【发布时间】:2018-05-02 07:41:20
【问题描述】:

我需要从具有多个条件的 MYSQL 表中检索所有数据,但这里有些输入是可选的。我在下面解释我的表格。

db_exam:

id   name   reg_no     zone    center    college    sub_code  

1    aaa      12         3       AB        scs          2

2    bbb      12         2       AB        BJB           2

3    ccc      13         3       AB        BJB          3    

我正在传递以下输入以获取所有数据。

reg_no=12
zone=3
center=AB
sub_code=2

从上面的输入中,有些是可选的,意味着center and sub_code 列的值可能存在或可能为空。在这里,我需要查询以使用上述条件和列 center=AB or center=''sub_code=2 or sub_code='' 的值来获取所有数据。但前两个条件是强制性的。

【问题讨论】:

  • 使用内连接和外连接,这些允许您仅在双方匹配时有条件地选择数据。

标签: php mysql


【解决方案1】:

使用下面的查询

select * from db_exam where reg_no=12 and zone=3 and (center=AB or center='') and (sub_code=2 or sub_code='')

【讨论】:

  • 那不行……查询只会在所有内容都匹配时返回一些内容……当匹配有效时,您需要使用左连接和右连接来选择部分。
  • 你直接把可能不对的输入值。
【解决方案2】:

用户 Where IN 查询如下。 传递输入值和默认值,如空字符串''。

SELECT * 
FROM db_exam
WHERE (reg_no = <number> AND zone= <number> AND center IN (<input>, '') AND sub_code IN (<input>, ''));

如果我错了,请纠正我。

【讨论】:

    【解决方案3】:

    试试这个:

        SELECT
            t1.id
           ,t1.name
           ,t1.reg_no
           ,t1.zone
           ,t1.college
           ,t2.center
           ,t3.sub_code
        FROM db_exam t1
        INNER JOIN db_exam t2
        ON t2.id=t1.id
        AND t2.center='AB'
        INNER JOIN db_exam t3
        ON t3.id=t1.id
        AND t3.sub_code=2;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 2019-03-06
      • 2011-08-30
      • 1970-01-01
      • 2021-10-27
      • 2010-10-31
      相关资源
      最近更新 更多