Jeg skal have lavet en (forbedret) søgefunktion til min shop. Pt. kan folk søge på et eller flere ord og hvis disse ord findes i overskrift eller brødtekst, så vises den pågældende vare i søgeresultatet. Jeg vil gerne gøre det således istedet. 1) Kunden søger på "motorhjelm" 2) Søgefunktionen skal så vise alle varer hvor motorhjelm figurer, men den skal vise alle de varer først hvor "motorhjelm" står i overskriften. Derefter skal den vise de varer hvor "motorhjelm" indgår i brødteksten Hvordan gøres dette lettest ? Jeg kan selvfølgelig lave 2 SQL forespørgsler men der må da være en smartere (og hurtigere) måde, hvor man kan prioritere hvad der skal vises først ? På forhånd tak
|
Hej.
Umiddelbart er det lidt svært at svare helt konkret, når du ikke fortæller hvordan dine tabeller ser ud. Men hvis vi tager udgangspunkt i hvordan du lettest kan implementere en søgefunktion, som virker som du beskriver:
Hold det simpelt og lav 2 SQL-kald:
Kald 1: Her henter du alle varer hvis titel matcher den regular expression, som du har bygget ud fra det indtastede søgeord.
Kald 2: Her henter du alle varer hvis brødtekst matcher samme regular expression som i kald 1.
Resultaterne fra kald 1 kan vises som de er.
Resultaterne fra kald 2 skal lige køres igennem en funktion først, hvor du tæller antal forekomster af søgeordet divideret med antallet af ord i brødteksten. Resultaterne skal så sorteres og vises, så dem med den laveste værdi står øverst (dvs. de har højest frekvens af søgeordet i forhold til størrelsen af brødteksten).
Rent cost/benefit-mæssigt set i forhold til implementeringstid/resultat, så kommer du sandsynligvis længst med ovenstående, simple løsning - fremfor at rode med at lave det hele i ét SQL-kald, hvilket afhængigt af nuværende databaseskema/mysql-version kan spænde fra en meget langhåret til en ret umulig opgave. :)
Håber du kan bruge inputtet.