Avatar billede peer Nybegynder
27. januar 2002 - 15:21 Der er 7 kommentarer og
2 løsninger

flerords søgning

Jeg har en søgefunktion der finder poster i en tabel. Feltet søgefunktionen kigger i hedder 'Keyword'. Der står kun et i keywordfeltet i hver post i tabellen. Problemet er nu at jeg fint kan søge på et ord, hvorefter den så returnerer de poster hvor keyword feltet er lig med det søgte ord. Men hvis jeg nu skriver 2 ord adskildt af et mellemrum, eller et kommer eller hvad ved jeg går det jo ikke så godt. Hvis jeg indtaster 'ord1 ord2' i mit søgefelt vil jeg gerne have at jeg får de poster hvor keyword enten er lig med ord1 eller ord2. Altså skal kun et af ordene matche.

Hvordan gør jeg det?
Avatar billede coltau Juniormester
27. januar 2002 - 15:30 #1
SQL-sætningen skal ændres fra:
SQL = "select * from tabel where keyword=" & ord1
til:
SQL = "select * from tabel where keyword=" & ord1 & " or keyword=" & ord2
Avatar billede peer Nybegynder
27. januar 2002 - 15:34 #2
/ coltau

Jeg indtaster ikke min søgetekst i 2 felter men i et felt. Så jeg har ikke nogen variabel der hedder ord2. Jeg har kun 1 variabel der hedder seektekst. Som det er nu er min SQL
SQL = "select * from tblkeyword where keyword LIKE " & seektekst
Avatar billede torbenmelander Nybegynder
27. januar 2002 - 15:35 #3
Her er en søgefunktion jeg lavede for nogle år siden:

<%
Dim strTitle
strTitle = "Resultat af søgning"

strSorter = Trim(Request.QueryString("Sorter"))
strKategori = Trim(Request.QueryString("Kategori"))

strKeyword = Trim(Request.Form("Keyword"))
strKeyword = Replace(strKeyword,"'","''")
strSearchType = Request.Form("searchtype")

If strSearchType <> "AND" And strSearchType <> "OR" Then
  strSearchType = "OR"
End If



Dim s, sArray(), u, y

s = strKeyword

i = 0

While s <> ""
  y = InStr(1, s, " ", 1)
  If y = 0 Then
    y = Len(s)+1
  End If
  If y > 1 Then
    ReDim Preserve sArray(u)
    sArray(u) = Left(s,y-1)
    u = u + 1
  End If
  s = Mid(s,y+1)
Wend
%>

<!--#include virtual="/includes/top.asp"-->
<!--#include virtual="/includes/middle.asp"-->

<%

Response.Write "<BR>"
Response.Write "<DIV STYLE=""border-bottom:1px solid #C6C6C6; height:5px; border-top:1px solid #C6C6C6"">"
Response.Write "<BR>"

If strKeyword <> "" Then
  Response.Write "<FONT FACE=""Verdana"" SIZE=""2"" COLOR=""#000000""><B>Resultat af søgning på '" & strKeyword & "':</B></FONT>"
Else
  Response.Write "<FONT FACE=""Verdana"" SIZE=""2"" COLOR=""#000000""><B>Resultat af søgning på kategorien: '" & Request.QueryString("Kategori") & "':</B></FONT>"
End If

Response.Write "<BR>"

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ("Server=(local);Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("\CD-ROM-database.mdb"))

If strKeyword <> "" Then

  strSQL = "SELECT Produktnr, Kategori, Navn, Beskrivelse, Skuffenr, Rækkenr FROM Emner WHERE"
  strSQL = strSQL & " (Produktnr LIKE '%" & sArray(LBound(sArray)) & "%')"

  For n = LBound(sArray)+1 To UBound(sArray)
    strSQL = strSQL & " " & strSearchType & " (Produktnr LIKE '%" & sArray(n) & "%')"
  Next

  strSQL = strSQL & " OR (Kategori LIKE '%" & sArray(LBound(sArray)) & "%')"

  For n = LBound(sArray)+1 To UBound(sArray)
    strSQL = strSQL & " " & strSearchType & " (Kategori LIKE '%" & sArray(n) & "%')"
  Next

  strSQL = strSQL & " OR (Navn LIKE '%" & sArray(LBound(sArray)) & "%')"

  For n = LBound(sArray)+1 To UBound(sArray)
    strSQL = strSQL & " " & strSearchType & " (Navn LIKE '%" & sArray(n) & "%')"
  Next

  strSQL = strSQL & " OR (Beskrivelse LIKE '%" & sArray(LBound(sArray)) & "%')"

  For n = LBound(sArray)+1 To UBound(sArray)
    strSQL = strSQL & " " & strSearchType & " (Beskrivelse LIKE '%" & sArray(n) & "%')"
  Next

  strSQL = strSQL & " OR (Skuffenr LIKE '%" & sArray(LBound(sArray)) & "%')"

  For n = LBound(sArray)+1 To UBound(sArray)
    strSQL = strSQL & " " & strSearchType & " (Skuffenr LIKE '%" & sArray(n) & "%')"
  Next

  strSQL = strSQL & " OR (Rækkenr LIKE '%" & sArray(LBound(sArray)) & "%')"

  For n = LBound(sArray)+1 To UBound(sArray)
    strSQL = strSQL & " " & strSearchType & " (Rækkenr LIKE '%" & sArray(n) & "%')"
  Next

Else

  strSQL = "Select * From Emner Where Kategori = '" & Request.Querystring("kategori") &"' "

End If

Set rs = Conn.Execute(strSQL)

Response.Write "<CENTER>"
Response.Write "<BR>"

Response.Write "<TABLE WIDTH=""95%"" HEIGHT=""*"" BORDER=""1"" BGCOLOR=""#FFFFFF"" CELLPADDING=""0"" CELLSPACING=""0""  BORDERCOLOR=""#000000"">"
Response.Write "<TR ALIGN=""center"">"
Response.Write "<TD>"
Response.Write "<TABLE WIDTH=""100%"" HEIGHT=""*"" BORDER=""0"" BGCOLOR=""#FFFFFF"" CELLPADDING=""2"" CELLSPACING=""0"">"
Response.Write "<TR ALIGN=""center"" BGCOLOR=""#800000"">"
Response.Write "<TD WIDTH=""25%"" ALIGN=""center"" STYLE=""border-bottom:1px solid #646464;height:5px;""><FONT COLOR=""#FFFFFF""><B>Produktnr</B></FONT></TD>"
Response.Write "<TD WIDTH=""30%"" ALIGN=""left"" STYLE=""border-bottom:1px solid #646464;height:5px;""><FONT COLOR=""#FFFFFF""><B>Kategori</B></FONT></TD>"
Response.Write "<TD WIDTH=""45%"" ALIGN=""left"" STYLE=""border-bottom:1px solid #646464;height:5px;""><FONT COLOR=""#FFFFFF""><B>Navn</B></FONT></TD>"
Response.Write "</TR>"

If Not (rs.BOF Or rs.EOF) Then
Do

  Response.Write "<TR BGCOLOR=""#FFFFFF"">"
  Response.Write "<TD WIDTH=""25%"" ALIGN=""center"" STYLE=""border-top:1px solid #646464;height:5px;"">" & rs("Produktnr") & "</TD>"
  Response.Write "<TD WIDTH=""30%"" ALIGN=""left"" STYLE=""border-top:1px solid #646464;height:5px;"">" & rs("Kategori") & "</TD>"
  Response.Write "<TD WIDTH=""45%"" ALIGN=""left"" STYLE=""border-top:1px solid #646464;height:5px;"">" & rs("Navn") & "</TD>"

  Response.Write "</TR>"

  Response.Write "<TR BGCOLOR=""#FFFFFF"">"
  Response.Write "<TD WIDTH=""25%"" ALIGN=""left""> </TD>"
  Response.Write "<TD WIDTH=""30%"" ALIGN=""left""> </TD>"
  Response.Write "<TD WIDTH=""45%"" ALIGN=""left"">Beskrivelse: " & rs("Beskrivelse") & "</TD>"
  Response.Write "</TR>"
 
  rs.MoveNext
Loop While Not rs.EOF
Else
  Response.Write "<TABLE WIDTH=""100%"" HEIGHT=""*"" BORDER=""0"" BGCOLOR=""#FFFFFF"" CELLPADDING=""2"" CELLSPACING=""0"">"
  Response.Write "<TR BGCOLOR=""#FFFFFF"">"
  Response.Write "<TD WIDTH=""100%"" ALIGN=""left"">Søgningen gav intet resultat!!!</TD>"
  Response.Write "</TR>"
  Response.Write "</TABLE>"
End If

Conn.Close
Set Conn = Nothing

Response.Write "</TABLE>"

Response.Write "</TD>"
Response.Write "</TR>"
Response.Write "</TABLE>"

Response.Write "</CENTER>"

Response.Write "<BR>"
Response.Write "</DIV>"
Response.Write "<BR>"

%>

<!--#include virtual="/includes/bottom.asp"-->

Denne blev så kaldt med:

<FORM METHOD="POST" ACTION="search.asp" AUTOCOMPLETE="off">
<INPUT TYPE="text" NAME="Keyword" SIZE="22" VALUE="">
<INPUT TYPE="submit" VALUE="Søg" NAME="Action">

<INPUT TYPE="radio" NAME="searchtype" VALUE="AND" CHECKED> Søgning på alle ord (og)<BR>
<INPUT TYPE="radio" NAME="searchtype" VALUE="OR">Søgning på nogen ord (eller)
Avatar billede coltau Juniormester
27. januar 2002 - 15:44 #4
Det havde jeg på fornemmelsen. Altså skal dit søgeord skilles af i det antal ord der nu er indtastet. Hvis ikke torbenmelander's svar virker så sig' li' til.
Avatar billede peer Nybegynder
27. januar 2002 - 15:47 #5
/ torben

Har du noget imod at udspecifierer den lidt hvis jeg nu siger at tekstvariabeleren med søgeordet hedder 'seektekst'. Man kan maks søge på 3 ord og disse skal adskilles med mellemrum.

Kan du oversættet det til det svar du har? Så ville jeg være yderst taknemmelig.

Og coltau hvis du har nogle gode ideer må du endelig sige til.
Avatar billede askhoej Praktikant
27. januar 2002 - 15:50 #6
Ellers så brug:

Dim strSQl, MyArray, bolFirst
MyArray = Split(seektekst," ")

strSQL = "SELECT * FROM tblkeyword"

bolFirst = True

For z=0 To UBound(MyArray)

    If bolFirst Then
        strSQL = strSQL & " WHERE keyword LIKE '"& MyArrau(z) &"'"
        bolFirst = False
    Else
        strSQL = strSQL & " AND keyword Like '"& MyArray(z)  &"'"
    End If

Next
Avatar billede peer Nybegynder
27. januar 2002 - 16:29 #7
// ashoej og torbenmelander
Kan ikke lige poste et svar så deler jeg pointene mellem jer. Det var begge nogle godt svar. Torben fik hul på bylden og askhoej klarede det sidste.

Kanon gutter, tak for det :o)
Avatar billede torbenmelander Nybegynder
27. januar 2002 - 16:55 #8
Godt du kunne bruge det .. og på forhånd tak for pointne :-)
Avatar billede askhoej Praktikant
27. januar 2002 - 18:44 #9
Godt du kunne bruge forslagene og skulle det være en anden gang.
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