Avatar billede bramsing Nybegynder
14. april 2009 - 12:06 Der 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

    Set rsSoeg = Conn.execute(SQL)
Avatar billede tjp Mester
14. april 2009 - 13:24 #1
Prøv evt at tjekke om den går forbi ved at tilføje en 'else' tilsidst.
Avatar billede bramsing Nybegynder
14. april 2009 - 13:33 #2
Well... Jeg har faktisk haft defineret
if request.form("sogtype") = "wild" then
[....]
else
[....]
end if

Men da det ikke virkede lavede jeg det om til elseif .....
Avatar billede tjp Mester
14. april 2009 - 13:54 #3
Så sku det være udelukket.. :-)
Og det er ikke sådan at posterne der sku matche indeholder mellemrum eller andre blanktegn?
Avatar billede bramsing Nybegynder
14. april 2009 - 14:11 #4
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)...

og alle poster har mellemrum i...
Avatar billede tjp Mester
14. april 2009 - 15:16 #5
Så skal anden del vist ændres til noget a la:

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
Avatar billede bramsing Nybegynder
14. april 2009 - 15:35 #6
Det hjalp på ingen måde...
Avatar billede tjp Mester
14. april 2009 - 15:51 #7
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
Avatar billede bramsing Nybegynder
14. april 2009 - 17:31 #8
ææ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
Avatar billede tjp Mester
14. april 2009 - 20:01 #9
Ikke helt... der er indskudt et mellemrum:

" 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.
Avatar billede bramsing Nybegynder
15. april 2009 - 08:59 #10
Ja, ok... Det havde jeg ikke lige set...

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 :-)

Og mange tak for hjælpen...
Avatar billede tjp Mester
15. april 2009 - 09:42 #11
Here U R... :-)

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) & "')"
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester