14. april 2009 - 12:06Der er
10 kommentarer og 1 løsning
Brug af wildcard og ikke brug af wildcard i MSSQL
Jeg har nedenstående kode, som ikke helt virker... Når sogtype er markeret til "wild" kommer der nogle resultater ud, men når den står til "notwild" kommer der ikke noget resultat ud, selv om jeg positivt ved at der er flere poster der passer til søgeordne...
Er der en der hjælpe lidt, for jeg har vidst gloet mig blind på det...
DIM SearchArray SearchArray = split(request.form("soegtext"), " ")
if request.form("sogtype") = "wild" then SQL = "SELECT TOP 50 * FROM "&Table1&" WHERE tekst LIKE '% %'" For i = LBound(SearchArray) To UBound(SearchArray) SQL = SQL & " AND tekst LIKE '%" & SearchArray(i) & "%'" NEXT SQL = SQL & " ORDER BY AutoID DESC" elseif request.form("sogtype") = "notwild" then SQL = "SELECT TOP 50 * FROM "&Table1&" WHERE tekst LIKE '% %'" For i = LBound(SearchArray) To UBound(SearchArray) SQL = SQL & " AND tekst LIKE '" & SearchArray(i) & "'" NEXT SQL = SQL & " ORDER BY AutoID DESC" end if
Jo.. Den søger i en tekst (text) hvor den skal matche flere ord fra søgefeltet
Eks. request.form("sogtype") = "notwild" "god dag" så skulle den gerne finde de poster hvor begge ord indgår som de er skrevet...
request.form("sogtype") = "wild" "god dag" så skulle den gerne finde de poster hvor begge ord indgår helt eller delvis (god, godt, gode - dag, dage, dagene)...
elseif request.form("sogtype") = "notwild" then SQL = "SELECT TOP 50 * FROM " & Table1 & " WHERE tekst LIKE '% %'" SQL = SQL & " AND tekst LIKE '" & Join(SearchArray, " ") & "' ORDER BY AutoID DESC" end if
Okay, er det meningen at den skal finde "god dag i dag" og "han blir nok god igen en dag", når soegtext er "god dag" ? Hvad så med: ... elseif request.form("sogtype") = "notwild" then SQL = "SELECT TOP 50 * FROM " & Table1 & " WHERE tekst LIKE '% %'" For i = LBound(SearchArray) To UBound(SearchArray) SQL = SQL & " AND tekst LIKE '% " & SearchArray(i) & " %'" NEXT SQL = SQL & " ORDER BY AutoID DESC" end if
ææhhmm... Dit sidste forslag er da det som står først: if request.form("sogtype") = "wild" then SQL = "SELECT TOP 50 * FROM "&Table1&" WHERE tekst LIKE '% %'" For i = LBound(SearchArray) To UBound(SearchArray) SQL = SQL & " AND tekst LIKE '%" & SearchArray(i) & "%'" NEXT SQL = SQL & " ORDER BY AutoID DESC" elseif request.form("sogtype") = "notwild" then [....] end if
" AND tekst LIKE '%" & SearchArray(i) & "%'" " AND tekst LIKE '% " & SearchArray(i) & " %'"
hvilket gerne skulle bevirke at kun ord som er identiske med ord i SearchArray bli'r matchet. Antager at alle ord i 'tekst' er omsluttet af mellemrum... hvis dette ikke er gældende for første og sidste ord i 'tekst', skal der også søges på dette.
Resultatet blev: DIM SearchArray SearchArray = split(request.form("soegtext"), " ")
if request.form("sogtype") = "wild" then SQL = "SELECT TOP 50 * FROM "&Table1&" WHERE tekst LIKE '%%'" For i = LBound(SearchArray) To UBound(SearchArray) SQL = SQL & " AND tekst LIKE '%" & SearchArray(i) & "%'" NEXT SQL = SQL & " ORDER BY AutoID DESC" elseif request.form("sogtype") = "notwild" then SQL = "SELECT TOP 50 * FROM "&Table1&" WHERE tekst LIKE '%%'" For i = LBound(SearchArray) To UBound(SearchArray) SQL = SQL & " AND tekst LIKE '% " & SearchArray(i) & " %' OR tekst LIKE '" & SearchArray(i) & " %' OR tekst LIKE '% " & SearchArray(i) & "'" NEXT SQL = SQL & " ORDER BY AutoID DESC" end if
Så hvis du lægger et svar vil jeg kvitere med lidt point :-)
Du skal vist ha parentes omkring for at det er helt korrekt. AND har højere precedence end OR:
SQL = SQL & " AND (tekst LIKE '% " & SearchArray(i) & " %' OR tekst LIKE '" & SearchArray(i) & " %' OR tekst LIKE '% " & SearchArray(i) & "')"
Synes godt om
Ny brugerNybegynder
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.