Gewerkschaft bestellen, aber deutlich unterscheiden

wie man eine Tabelle abfragen (ID, Titel, Firma), um alle datasätze zu erhalten, wo der Titel "Begriff" enthält, der vollständig übereinstimmende Aufzeichnungen enthält, dann zuerst Teilspiele. Mit anderen Worten, wenn ich auf der search nach "foo" Ich wand Aufzeichnungen als angezeigt

  • Foo und Söhne
  • gut foo
  • foo bar
  • Fußball
  • Herfooles

Heres was ich habe

Create PROCEDURE [dbo].[SearchUserInfo] @query nvarchar(500), @term nvarchar(500) (SELECT Title,Company, 1 as match FROM Stores WHERE CONTAINS(Title, @query)) UNION (SELECT Title,Company, 0 as match FROM Stores WHERE Title like '%' + @term +'%') order by match desc 

Das Problem mit dieser Abfrage ist, dass es doppelte datasätze zurückgibt. wenn ich 0 als Match tehn Ich weiß nicht, wie zu sortieren, so Ergebnisse aus CONTAINS erscheinen vor Ergebnisse von LIKE.

Vielen Dank

Sie können die beiden Ergebnismengen kombinieren, dann verwenden Sie GROUP BY , um die Duplikate zu entfernen und ORDER BY MAX(match) DESC zu platzieren, um die von CONTAINS Gruppen zu CONTAINS

 ;WITH CTE AS (SELECT Title, Company, 1 AS match FROM Stores WHERE CONTAINS(Title, @query) UNION ALL SELECT Title, Company, 0 AS match FROM Stores WHERE Title LIKE '%' + @term + '%') SELECT Title, Company, FROM CTE GROUP BY Title, Company ORDER BY MAX(match) DESC 

Wenn Sie die Volltextsuche nicht verwenden möchten, können Sie dies mit einer einzigen Abfrage machen:

 select title, company, (case when MatchType like 'FULL%' then 1 else 0 end) as Match from (select title, company, (case when title like concat(@query, ' %') then 'FULL START' when title like concat('% ', @query) then 'FULL END' when title like concat('% ', @query, ' %') then 'FULL MIDDLE' when title like concat(@query, '%') then 'PARTIAL START' when title like concat('%', @query) then 'PARTIAL END' when title like concat('%', @query, '%') then 'PARTIAL MIDDLE' else 'NONE' end) as MatchType from Stores ) s where MatchType <> 'NONE' order by MatchType 

Dies kann nicht ganz geben Ihnen die Flexibilität, die Sie wollen in Bezug auf die Begrenzung auf die Worte. Aber es gibt dir mehr Kontrolle über die Art der passenden und daraus resultierenden Bestellung.