如何通过多个下拉框实现服务端多列SQL过滤?
多条件过滤的正确实现方式
你原来的SQL写法逻辑冗余,核心问题是当某个下拉框未选择时,对应的变量为空,会错误地匹配列值为空的行,而非忽略该条件。正确的思路是:仅对用户选择了的下拉框应用过滤条件,未选择的则跳过。
方案1:变量为空时忽略条件(适用于未选择时变量为NULL或空字符串)
如果用户未选择某个下拉框时,对应的变量(v_var_resp、v_var_type、v_var_sn)为NULL,用以下SQL:
WHERE ({{v_var_resp}} IS NULL OR resp = {{v_var_resp}}) AND ({{v_var_type}} IS NULL OR customer = {{v_var_type}}) AND ({{v_var_sn}} IS NULL OR sn = {{v_var_sn}})
如果未选择时变量是空字符串(''),则修改为:
WHERE ({{v_var_resp}} = '' OR resp = {{v_var_resp}}) AND ({{v_var_type}} = '' OR customer = {{v_var_type}}) AND ({{v_var_sn}} = '' OR sn = {{v_var_sn}})
方案2:下拉框有“全部”默认选项
如果下拉框默认选项是“全部”(对应值比如'ALL'),则判断变量是否为该默认值,是则忽略条件:
WHERE ({{v_var_resp}} = 'ALL' OR resp = {{v_var_resp}}) AND ({{v_var_type}} = 'ALL' OR customer = {{v_var_type}}) AND ({{v_var_sn}} = 'ALL' OR sn = {{v_var_sn}})
逻辑说明
每个条件都采用(忽略条件的判断 OR 列等于变量)的结构,并用AND连接所有条件:
- 当用户选择了某个下拉框,变量有有效值,就会应用
列等于变量的过滤 - 当用户未选择,触发
忽略条件的判断,该条件自动成立,不会对结果产生过滤作用
这种写法简洁且逻辑准确,覆盖了用户选择1个、2个或3个选项的所有场景。
内容的提问来源于stack exchange,提问作者Blaze
相关产品推荐
相关产品推荐

