webForumDet fria alternativet

Sortera sökresultat i mysql

1 svar · 448 visningar · startad av M@rtin

M@rtinMedlem sedan dec. 19992 085 inlägg
#1

Jag har tidigare använt MATCH() AGAINST() funktionerna i mysql för att göra sökningar men det fungerar ju minst sagt bristfälligt så jag tänkte koda en egen sökalgoritm med hjälp av LIKE kommandot istället.

Problemet blir att jag får massor av kriterier som kan se ut så här:
title LIKE '%test%' OR title LIKE '%annat%' OR title LIKE '%tredje%'
o.s.v.

Finns det något sätt att sortera ett sådant resultat efter relevans? Det jag skulle vilja ha är alltså någon variabel som räknas upp för varje ord som matchas. Men det kanske inte går? Kan tänka mig att sökningen slutar så fort en OR-sats uppfylls?

M@rtinMedlem sedan dec. 19992 085 inlägg
#2

Kom på en lösning själv:

select title,IF(title LIKE '%test%',1,0)+IF(title LIKE '%annat%',1,0) as
score from tabell where title LIKE '%test%' or title LIKE '%annat%' order by score DESC;

Känns lite onödigt att göra dem två gånger, det jag vill göra i WHERE är ju egentligen bara att kolla om score>0 men det verkar bara gå att använda fält som ingår i tabellen i WHERE. Eller?

125 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)