webForumDet fria alternativet
Logga in / Bli medlem

sortera recordset efter "relevans"

ASP

4 svar · 265 visningar · startad av mrblonde

Medlem sedan aug. 20012 349 inlägg
Trådstart#1

hmmm... bygger en sökfunktion som gör en vanligt select * from tbl where fält LIKE '%sökord%'

Nu skulle jag vilja sortera det här recordsetet efter hur tidigt i träfftexten ordet förekommer.
Någon som har någon vettig funktion ihopknåpad för detta? Den kan returnera en array också, det funkar med.

Ex. om träff ett är "Hej och hå"
och träff två är "Hå och hej"

Så vill jag att om jag söker på "Hå" så skall de komma sorerade med träff två först och träff ett sen (och sen resten med i fallande ordning)

Hittade inget vettigt när jag sökte, men jag kanske sökte fel :)

Medlem sedan dec. 200012 464 inlägg
#2
select * from tbl where falt like '%sökord%' order by charindex('sökord',falt)

red: sql server/sybase specifik

Medlem sedan aug. 20012 349 inlägg
#3

Tack!

LarsG, du är suverän!

hmmm.... finns det något sätt även att ta order by hur ofta "sökord" förekommer i strängen?

Bara undrar, det gäller en sql server 7.
(har du något bra tips på en länk där alla sådana däringa metoder i sql finns uppradeade? charindex och sånt?)

Medlem sedan dec. 200012 464 inlägg
#4

http://msdn.microsoft.com/library/default.asp?url=/nhp/Default.asp?contentid=28000409

Sen kan du gå vidare från denna. Det verkar bara finnas en fullständig beskrivning för SQL server 2000.

Om man vill ha antal förekomster så får man tricka till det lite

  select * from t
   where falt like '%sökord%'
  order by (len(falt)-len(replace(falt,'sökord',''))/len('sökord') desc

red: desc kanske är mer relevant i detta sammanhang

Medlem sedan aug. 20012 349 inlägg
#5

tack.

Alltid vettig info snabbt.

379 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
124 ms — deklarationer (db)
120 ms — hämta statistik (db)
132 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)