我需要在我的应用程序中搜索实体。
搜索面板由8个字段组成,用户可以填写他想要的任何字段。
我是否必须为所有可能的组合编写查询或者正确的方法是什么?
答案 0 :(得分:1)
有很多方法可以实现这一点,但最简单的方法是使用dynamic SQL。
这具有可读性,SQL Injection曝光率以及查询计划缓存和优化的相关成本。
至于构建动态SQL字符串的位置 - 如果数据库支持那些,你可以在存储过程中执行此操作 - 这是我的首选,因为你可以传入参数并对SQL注入提供额外的保护
您也可以在应用程序中构建它,但这需要您对数据更加小心。
基本技术是为不同的搜索字段构建WHERE
子句的不同部分(可能从WHERE 1 = 1
开始,这样您就可以添加AND
子句而无需检查每个子句以查看它是否是第一个。)
我建议阅读我链接的dynamic SQL文章。
答案 1 :(得分:0)
这样做的经典方法是
SELECT
<fields>
FROM tablename
WHERE
(field1 like '%[field1 user input]%' OR '[field1 user input]'='')
AND (field2 like '%[field2 user input]%' OR '[field2 user input]'='')
...
AND (field8 like '%[field8 user input]%' OR '[field8 user input]'='')
每个理智的查询优化器都会优化掉不需要的条件