I need implement simple search in small content table: id, name, description, content. Results must be order by priorities
it's mean that if searched word was found in description field, it will be shown only after all rows that have dog in name field
What I did:
I tried create temp table with structure like table that I use but with another field priority. for each field, these I use for search, do insert select to temp table
Example:
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
Syntax. SELECT column-list FROM table_name [WHERE condition] [ORDER BY column1, column2, .. columnN] [ASC | DESC]; You can use more than one column in the ORDER BY clause.
No, the order of query parameters should not matter.
You can use the LOW_PRIORITY or HIGH_PRIORITY in your queries depending on the type of query you execute: INSERT [LOW_PRIORITY | HIGH_PRIORITY] INTO ... SELECT [HIGH_PRIORITY] * FROM ... UPDATE [LOW_PRIORITY] table ...
ORDER BY is evaluated before the SELECT, as the ordering changes the results returned. TOP 1 also ensures the lowest REVISION_NO is returned, therefore it appears you are using the query correctly. Save this answer.
One way of doing it would be using the CASE keyword:
SELECT name, description, content,
priority = CASE
WHEN name LIKE '%' + @query + '%' THEN 1
WHEN desription LIKE '%' + @query + '%' THEN 2
WHEN content LIKE '%' + @query + '%' THEN 3
END CASE
FROM tbl_content
WHERE
name LIKE '%' + @query + '%' OR
desription LIKE '%' + @query + '%' OR
content LIKE '%' + @query + '%'
ORDER BY priority ASC
The easiest way would be to use UNION query:
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 + '%'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With