1

我有一个表,我试图在其中运行 SQL 查询(经典 ASP)。该表的结构如下:

ID  Name    City        State   Zip     Country
1   Name1   Los Angeles CA      90210   USA
2   Miami   New York    NY      10011   USA
3   Name3   Miami       FL      33184   USA

我希望能够运行一个搜索多个列的查询(例如“迈阿密,佛罗里达州)并返回正确的结果。

搜索为Name=SearchTerm,我当前的 SQL 查询是:

fp_sQry="SELECT * FROM tableName WHERE ((Shiur = '2') or (Shiur IS NULL)) AND ((City LIKE '::Name::%') or (State LIKE '%::Name::') or (Name LIKE '%::Name::%') or (Zip LIKE '%::Name::%') or (Country LIKE '%::Name::%')) AND (Nusach LIKE '%::Nusach::%') ORDER BY Name ASC"

就目前而言,我只能搜索单个列,因此Name=Miami实际上搜索所有列并返回所有正确的结果,而Name=Miami,+FL 或Name=Miami+FL返回 0 个结果。

关于如何调整我的查询以匹配多列中查询的多个部分的任何想法?

4

1 回答 1

3

在我看来,您正在尝试在不支持全文搜索的后端进行全文搜索。从 Access 切换到 SQL Server 可能会更好。如今,IIRC 甚至 Express 版都支持全文搜索

在 Access 上,您可以通过如下修改查询来模拟全文搜索:

SELECT *
FROM tableName
WHERE (Shiur = '2' OR Shiur IS NULL)
  AND City + State + Name + Zip + Country LIKE '%::Name::%'
  AND Nusach LIKE '%::Nusach::%'
ORDER BY Name ASC

请注意,所有连接的字段 ( City + State + Name + Zip + Country) 必须具有相同的数据类型。

但是,即使这样,当您想要搜索多个词时,您仍然必须解析输入字符串并修改查询。对于您的示例输入Miami+FL,您需要拆分该字符串:

inputString = "Miami+FL"
searchTerms = Split(inputString, "+")

将查询修改为如下内容:

SELECT *
FROM tableName
WHERE (Shiur = '2' OR Shiur IS NULL)
  AND City + State + Name + Zip + Country LIKE '%::param1::%'
  AND City + State + Name + Zip + Country LIKE '%::param2::%'
  AND Nusach LIKE '%::Nusach::%'
ORDER BY Name ASC

并将searchTerms(0)andsearchTerms(1)作为 2 个参数传递给查询。

于 2013-07-02T08:19:45.720 回答