忽略列如果列值为null或空对MySQL表搜索

问题描述:

SELECT logic_id 
FROM business_logic_details 
WHERE if(form_completion != 0.00,form_completion,0) = '90' 
    AND if(query_type IS NOT NULL 
     OR query_type !='',query_type,0) LIKE '%domestic%' 
    AND if(client_type IS NOT NULL 
     OR client_type !='',client_type,0) LIKE '%existing%' 
    AND if(tour_package IS NOT NULL 
     OR tour_package !='',tour_package,0) LIKE '%S%' 
    AND if(tour_type IS NOT NULL 
     OR tour_type !='',tour_type,0) LIKE '%2%' 
    AND if(currency IS NOT NULL 
     OR currency !='',currency,0) = 'INR' 
    AND if(country IS NOT NULL 
     OR country !='',country,0) = '105' 
    AND if(adults IS NOT NULL 
     OR adults !='',adults,0) = '1' 
    AND if(duration_of_stay IS NOT NULL 
     OR duration_of_stay !='',duration_of_stay,0) = '5' 
ORDER BY logic_id ASC 
+0

只是评论...你真的需要在你的'query_type'和'client_type'列使用通配符? – Bustikiller

+0

是的,这些列有逗号分隔值。我们将搜索这些逗号分隔值中的一个或多个值。 –

对于使用COALESCE功能:

SELECT logic_id 
FROM business_logic_details 
WHERE COALESCE(form_completion, 90) = 90 
    AND COALESCE(query_type, 'domestic') LIKE '%domestic%' 
     ... 

我也强烈建议比较整数作为整数,而不是字符串:

好:0 = 90
不好:0 = '90'

+0

这不是预期的返回result.same结果作为我的查询返回。 –

+0

编辑我的答案以反映您的需求。将第二个参数作为期望值,所以在空值的情况下它将被评估为真。 –

+0

是的,我得到了预期的结果。谢谢,我真的很感谢你的帮助。 –