在我的MSSQL表中,我有两个字段,第一个是post_name
(职位),另一个字段是org_name
(组织的名称或位置)。我正在编写一个PHP脚本来搜索这两个字段。我使用Select2 Bootstrap插件,它基本上是一个搜索行,根据用户输入的内容从数据库中获取下拉选项。
用户通常搜索包含post_name
和org_name
的完整职位名称。假设"Chief Sales Manager Toronto",前3个单词来自第一个字段,最后一个单词来自第二个字段。当用户开始输入"首席销售人员……"时,他应该能够得到多伦多、库比蒂诺或其他地方的此类经理的完整列表。
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并尝试通过使用end of 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中,我得到了一个不存在的函数的错误。
我是否有办法在这两个字段中同时搜索这样一个句子?
你想在SQL Server中的查询似乎是:
SELECT post_name, org_name
FROM table
WHERE post_name + org_name LIKE 'searchTerm%';
您可能还需要在列之间包含一个空格。
也就是说,您可能想要研究全文搜索功能。这可能是一个更好的解决你问题的办法。
您的最后一个查询将像这样工作
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%';