Hej udviklere,
jeg har i den seneste periode arbejdet på et par projekter hvor der skulle være en søgefunktion, og hver gang har søgealgoritmen virkeligt irriteret mig.
Måden jeg lave en søgning på er at dele søgeordet ved mellemrum og derefter søge efter dette ord i alle de felter jeg gerne vil finde noget fra i databasen. Som eksempel har jeg lavet noget der skal søge efter elever og lærere. Her søger den altså både på elevens navn, elevens klasse, lærerens navn og lærerens "shortcode" (en forkortelse på 3 karakter).
Eftersom det er noget live-search søger den hver gang man skriver et bogstav hvilket vil sige at hvis jeg f.eks. skriver "simon s" vil den første søge efter "simon" i elevnavn, elevklasse, lærenavn og lærekode. Dette er alt sammen meget fint, men når jeg så søger på "s" får jeg jo bare de samme resultater igen eftersom den forsøger at matche et elevnavn (mit navn: simon smith) med "simon" og "s" hvilket vil sige at den finder alle dem der hedder simon uden at de nødvendigvis har et efternavn der starter med "s".
Nogle vil måske spørger hvorfor jeg vælger at dele det op så og svaret er ganske enkelt at jeg ikke vil have at brugeren skal tage højde for eventuelle mellemnavn eller efternavne eleverne ikke bruger til hverdag.
Det er php og MySql jeg laver det med, så hvis nogen har et forslag til hvordan jeg bedst muligt kunne lave dette for at få en lidt bedre søgning må I endeligt sige til.
Et eksempel på en MySql forespørgsel i øjeblikket kunne være som følger:
- SELECT * FROM (
- SELECT id,name,class,1 as student,arrived FROM students WHERE
- (name LIKE '%simon%' OR class LIKE '%simon%') AND
- (name LIKE '%s%' OR class LIKE '%s%')
- UNION ALL
- SELECT id,name,address,0 as student,arrived FROM teachers WHERE
- (name LIKE '%simon%' OR code LIKE '%simon%') AND
- (name LIKE '%s%' OR code LIKE '%s%')
- ) AS students ORDER BY arrived,name ASC LIMIT 15
På forhånd mange tak :-)
EDITFor at være lidt mere specifikt med mit problem er det at jeg vil skulle lave en masse søgninger på partielle ord, f.eks. et halvt fornavn, mellemnavn eller efternavn eller måske kun en årgang ved søgning på klasser hvor klasserne er af format "2.a" og jeg kun søger på "2"
Indlæg senest redigeret d. 08.08.2011 12:02 af Bruger #8773