Sql server 搜索查询&x27;订购人';优先
我需要在小的内容表中实现简单的搜索:id、名称、描述、内容。 结果必须按优先次序排列Sql server 搜索查询&x27;订购人';优先,sql-server,search-engine,Sql Server,Search Engine,我需要在小的内容表中实现简单的搜索:id、名称、描述、内容。 结果必须按优先次序排列 名字 描述 内容 这意味着,若在描述字段中找到了搜索的单词,那个么它将仅显示在名称字段中包含dog的所有行之后 我所做的: DECLARE @query NVARCHAR(255) CREATE TABLE #tbl_search ( [id] INT NOT NULL , [name] NVARCHAR(255) , [description] NVAR
DECLARE @query NVARCHAR(255)
CREATE TABLE #tbl_search
(
[id] INT NOT NULL ,
[name] NVARCHAR(255) ,
[description] NVARCHAR(MAX) ,
[content] NVARCHAR(MAX) ,
[priority] INT
)
--searching in name field
INSERT INTO #tbl_search
( [ID] ,
[name] ,
[description] ,
[content] ,
[priority]
)
SELECT [ID] ,
[name] ,
[description] ,
[content] ,
1
FROM [tbl_content]
WHERE name LIKE '%' + @query + '%'
--searching in description field
INSERT INTO #tbl_search
( [ID] ,
[name] ,
[description] ,
[content] ,
[priority]
)
SELECT [ID] ,
[name] ,
[description] ,
[content] ,
2
FROM [tbl_content]
WHERE description LIKE '%' + @query + '%'
AND id NOT IN ( SELECT id
FROM #tbl_search )
--.....
SELECT *
FROM #tbl_search
ORDER BY [priority]
DROP TABLE #tbl_search
我尝试使用类似于我使用的表的结构创建临时表,但具有另一个字段优先级。对于我用于搜索的每个字段,请将选择插入临时表
示例:
DECLARE @query NVARCHAR(255)
CREATE TABLE #tbl_search
(
[id] INT NOT NULL ,
[name] NVARCHAR(255) ,
[description] NVARCHAR(MAX) ,
[content] NVARCHAR(MAX) ,
[priority] INT
)
--searching in name field
INSERT INTO #tbl_search
( [ID] ,
[name] ,
[description] ,
[content] ,
[priority]
)
SELECT [ID] ,
[name] ,
[description] ,
[content] ,
1
FROM [tbl_content]
WHERE name LIKE '%' + @query + '%'
--searching in description field
INSERT INTO #tbl_search
( [ID] ,
[name] ,
[description] ,
[content] ,
[priority]
)
SELECT [ID] ,
[name] ,
[description] ,
[content] ,
2
FROM [tbl_content]
WHERE description LIKE '%' + @query + '%'
AND id NOT IN ( SELECT id
FROM #tbl_search )
--.....
SELECT *
FROM #tbl_search
ORDER BY [priority]
DROP TABLE #tbl_search
最简单的方法是使用联合查询:
SELECT name AS text FROM tbl_content WHERE name LIKE '%' + @query + '%'
UNION
SELECT description AS text FROM tbl_content WHERE desription LIKE '%' + @query + '%'
UNION
SELECT content AS text FROM tbl_content WHERE content LIKE '%' + @query + '%'
一种方法是使用关键字:
为了完整起见,我使用case-when-in-order子句(查询mysql)将@Amirshk brilliant solution移动到下一个级别:
那么,有什么问题吗?我猜他在问,你会怎么做……是的,你说得对,这是一个问题:)很有趣,我不知道我有选择搜索的余地select@msony,现在你做:)
CASE
是一个非常强大的tool@msony我相信你不会得到复制品,除非你使用UNION ALL。他会得到复制品,原因查询仅包含1个冒号@Alex,您需要将所有3列添加到每个查询中(并保持条件不变)。
SELECT name, description, content
FROM tbl_content
WHERE
name LIKE '%' + @query + '%' OR
desription LIKE '%' + @query + '%' OR
content LIKE '%' + @query + '%'
ORDER BY CASE
WHEN name LIKE '%' + @query + '%' THEN 1
WHEN desription LIKE '%' + @query + '%' THEN 2
WHEN content LIKE '%' + @query + '%' THEN 3
END