webForumDet fria alternativet
Logga in / Bli medlem

Sortera sökresultat i mysql

Databaser & SQL

1 svar · 449 visningar · startad av M@rtin

Medlem sedan dec. 19992 085 inlägg
Frågan#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?

Medlem 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?

382 ms totalt · 4 externa anrop · v20260731065814-full.14655e19
122 ms — deklarationer (db)
128 ms — hämta statistik (db)
130 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)