26. februar 2009 - 13:34Der er
5 kommentarer og 1 løsning
Avanceret søgning med stored procedures
Hejsa
Jeg er igang med at lave en søgefunktion på mit hobbyprojekt, men den er lidt for kompliceret til, at jeg selv kan gennemskue den bedste løsning.
Hvis f.eks. brugeren søger på følgende: "tegneserie anders and"
Så skal jeg finde alle de resultater hvor disse ord indgår, men ikke nødvendigvis i sammenhæng. Hvordan får jeg lavet en søgning vha. en stored procedure?
Jeg er startet lidt på det, men jeg er ikke tilfreds. For det første søger den kun på hele strengen, og for det andet bliver der en masse "like"-statements, hvilket ikke er ønskværdigt.
Er der ikke en smartere måde?
CREATE PROCEDURE Products_Search ( @SearchString varchar(200) ) AS select * from Products inner join Categories on Categories.id = Products.CategoryId where ( ProductName like '%' + @SearchString + '%' or Description like '%' + @SearchString + '%' or Category.Name like '%' + @SearchString + '%' ) order by ProductName asc
Jeg har fået oprettet et Full Text Index på felterne "ProductName" og "Description". Jeg har droppet "Categories" ind til videre for at holde det simpelt.
Følgende sql kører:
SELECT * FROM Products WHERE CONTAINS(*, ' "anders" and "rip" ')
Problemet er, at hvis ordet "anders" kun er i feltet "ProductName", og ordet "rip" kun er i feltet "Description", så finder den ikke noget. De 2 ord SKAL være i samme felt for at den returnerer rækken.
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.