Avatar billede Mik2000 Professor
24. oktober 2013 - 19:20 Der er 8 kommentarer og
1 løsning

Søgning i database

Hej

Jeg tænker hvordan man laver en smart søgning hvor resultater kommer ud efter relevans.

Bruger man f.eks. kollonne LIKE '%$var%' så kommer det jo langt fra smart ud
Avatar billede Hardball21 Nybegynder
24. oktober 2013 - 19:55 #1
Relevans defineres jo normalt med et WHERE statement - ala dit forslag - så hvordan forstår du "relevans" ?

Forklar hvad du prøver at opnå
Avatar billede Mik2000 Professor
24. oktober 2013 - 21:12 #2
Har et eksempel:
Er det f.eks. mad, og man søger på is så vil chilISauce jo komme før is hvis man bare sortere på navn. Det er jo noget misvisende for søgeresultatet.

Så måske hvis man kunne lave en sætning der sagde
Først kommer: felt = '$var'
Så kommer: felt LIKE '$var%'
Til sidst kommer: felt LIKE '%$var%'

Men skulle jo helst være uden det blev for tungt og helst i en SQL sætning
Avatar billede Hardball21 Nybegynder
24. oktober 2013 - 21:44 #3
tror ikke du undgår nogle sjove resultater, men kan vel skrives som herunder


SELECT
    *

FROM
    tabel

WHERE
    felt LIKE '%$var%'

ORDER BY
    felt = '$var' ASC,
    felt = '$var%' ASC,
    felt = '%var%' ASC,
    felt ASC; ### denne sikrer at resten ogsaa sorteres


Jeg ville nok lave det med et eller to ekstra felter som du bruger til af udvælge og sortere med.
Avatar billede Mik2000 Professor
24. oktober 2013 - 23:04 #4
Hej

Den forstår ikke
ORDER BY
    felt = '$var' ASC,
    felt = '$var%' ASC,
    felt = '%var%' ASC,
    felt ASC; ### denne sikrer at resten ogsaa sorteres

Den sortere det bare efter felt asc
Avatar billede arne_v Ekspert
24. oktober 2013 - 23:55 #5
maaske noget a la:

SELECT felt,1 AS relevans FROM dintabel WHERE felt = '$var'
UNION
SELECT felt,2 AS relevans FROM dintabel WHERE felt LIKE '$var%' AND felt <> '$var'
UNION
SELECT felt,3 AS relevans FROM dintabel WHERE felt LIKE '%$var%' AND felt NOT LIKE '$var%'
ORDER BY relevans
Avatar billede Mik2000 Professor
25. oktober 2013 - 23:46 #6
Hej Arne

Tak for input

Jeg fik prøvet lidt med

SELECT felt FROM tabel WHERE felt LIKE '%$var%' ORDER BY CASE WHEN felt = '$var' THEN 1 WHEN felt LIKE '$var%' THEN  2 WHEN felt LIKE '%$var%' THEN 3 ELSE 4 END LIMIT 100

Kan du evt. sige noget om hvilken af de 2 måder der er bedst optimeret (server/database belastning)?
Avatar billede arne_v Ekspert
26. oktober 2013 - 00:05 #7
Det skal du nok maale med et passende stort antal raekker.
Avatar billede Mik2000 Professor
02. februar 2014 - 16:22 #8
Tak for input - der var så lidt forskel at det nok ikke gjorde det store ;)

Arne hvis du vil have point så ligger du bare et svar

Ps: Undskyld der er gået så længe
Avatar billede arne_v Ekspert
02. februar 2014 - 16:27 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester