Jag försöker mig på att göra en sökmotor som skall söka på:
maträtt(fritext)
ingredienser(fritext)
ejinnehållaingredienser(fritext)
typ(idnr)
tillfälle(idnr)
måltid(idnr)
tema(fritext)
Jag har alltså 3 fritextrutor där man kan skriva ord och 3 dropdown som baseras på idnr (räknare + primärnyckel)
och dels "tema" som man kan skriva med i url:en för att begränsa antal måltider inom ett eller flera teman.
så min SP ser ut nåt som (pseudokod):
SELECT * FROM tabell LEFT OUTER JOIN....WHERE Publiceringdatum <= '20050308'
AND tema=@tema1
OR tema=@tema2
OR tema=@tema3
OR tema=@tema4
OR tema=@tema5
AND thismeal LIKE '%' + @thismeal + '%'
AND ingrediens LIKE '%' + @ingrediens + '%'
AND ingrediens NOT LIKE '%' + @NOTIngrediens + '%'
AND type=@type
AND meal=@meal
AND occasion=@occasion
På ASP-sidan ser jag till att de tema jag skickar in (mellan 1-5) alltid skickas in med början på @tema1 och stigande.
Problemet är att när man bara t.ex. vill söka på ingrediens, så blir det fel iom att de andra värdena är tomma, jag får ett felaktigt resultat.
Om du skickar in null för de variabler som inte har något värde så
SELECT * FROM tabell LEFT OUTER JOIN....WHERE Publiceringdatum <= '20050308'
AND ((tema = @tema1 or @tema1 is null)
or (tema = @tema2 or @tema2 is null)
or (tema = @tema3 or @tema3 is null)
or (tema = @tema4 or @tema4 is null)
or (tema = @tema5 or @tema5 is null))
AND (thismeal LIKE '%' + @thismeal + '%'
or @thismeal is null)
AND (ingrediens LIKE '%' + @ingrediens + '%'
or @ingrediens is null)
AND (ingrediens NOT LIKE '%' + @NOTIngrediens + '%'
or @@NOTIngrediens is null)
AND (type=@type or @type is null)
AND (meal=@meal or @meal is null)
AND (occasion=@occasion or @occasion is null)
red.
Jag har märkt att det är dessa 4 rader som gör att sql-satsen inte fungerar:
AND (ingrediens NOT LIKE '%' + @NOTIngrediens + '%'
or @NOTIngrediens is null)
AND (type=@type or @type is null)
AND (meal=@meal or @meal is null)
AND (occasion=@occasion or @occasion is null)
Använder jag INTE dessa rader, så fungerar sökningen som den ska, vill dock ha med dessa också.
Aaah! Nu löste det sig....kunde inte skicka in '' in i AND (ingrediens NOT LIKE '%' + @NOTIngrediens + '%'
or @NOTIngrediens is null)
utan var tvungen att skicka in '''', och med type, meal, occasion var jag tvungen att skicka in null istället, då funkar det :)