SQL同时搜索两个字段中的部分句子

时间:2014-03-22 13:39:03

标签: php sql sql-server

在我的MSSQL表中,我有两个字段,第一个是post_name(作业位置),另一个是org_name(组织的名称或位置)。我正在编写一个PHP脚本来浏览这两个字段。我使用Select2 Bootstrap插件,它基本上是一个搜索行,根据用户输入的内容从数据库中提取下拉选项。

用户通常会搜索完整的职位,包括post_nameorg_name。让我们说“首席销售经理多伦多”,其中前3个单词来自第一个字段,最后一个单词来自第二个字段。当用户开始键入Chief Sales Man时......“他应该能够在多伦多,库比蒂诺或其他任何地方获得这些经理的完整列表。

我用于此的SELECT查询是:

SELECT post_name, org_name 
FROM table 
WHERE post_name LIKE 'searchTerm%';

只有当我没有开始输入组织名称时,它才会给我所需的职称,然后它会尝试在post_name字段中找到整个句子并给出一个空字符串。

我也尝试过:

SELECT post_name, org_name 
FROM table 
WHERE post_name LIKE 'searchTerm%' OR org_name LIKE '%searchTerm%';

或者我试图拆分searchTerm并尝试使用searchTerm结尾搜索org_name字段:

SELECT post_name, org_name 
FROM table 
WHERE post_name LIKE 'searchTerm%' 
    AND org_name LIKE '%.substr(searchTerm, -6).%';

但最后的那些更可悲。我正在考虑使用CONCAT来统一这两个字段,以便我可以将这两个字段搜索为一个,例如

SELECT CONCAT(post_name, org_name) as full_title
FROM table 
WHERE full_title LIKE 'searchTerm%';

但是在MSSQL Server Express 2005中,我收到了一个不存在函数的错误。

有什么方法可以同时在这两个字段中搜索这样一句话吗?

2 个答案:

答案 0 :(得分:1)

您的上一个查询将像这样工作

SELECT post_name, org_name
FROM (
       SELECT post_name, org_name,
       CONCAT(post_name,' ', org_name) as full_title
       FROM table 
) z
WHERE full_title LIKE 'searchTerm%';

答案 1 :(得分:1)

SQL Server中您想要的查询似乎是:

SELECT post_name, org_name
FROM table 
WHERE post_name + org_name  LIKE 'searchTerm%';

您可能还希望在列之间包含空格。

尽管如此,您可能希望研究全文搜索功能。它可能是解决您问题的更好方法。