从应用程序编写搜索查询

时间:2011-12-18 19:25:48

标签: sql database

我需要在我的应用程序中搜索实体。

搜索面板由8个字段组成,用户可以填写他想要的任何字段。

我是否必须为所有可能的组合编写查询或者正确的方法是什么?

2 个答案:

答案 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]'='')

每个理智的查询优化器都会优化掉不需要的条件