Avatar billede jpv Nybegynder
07. september 2003 - 20:22 Der er 14 kommentarer og
1 løsning

Søgening i et kolonnefelt, ASP & ACCESS

I min database har jeg en tabel med en kolonne der hedder beskrivelse. Jeg vil gerne have at man kan søge på nogle af de ord som står i feltet.
F.eks en beskrivelse:
Fisk er godt for helbredet.

Altså skal man kunne søge på fisk eller helbred og få vist resultatet. Det skal altså ikke være nødvendig at søge ordret på hvad der står i feltet.
Det skal også være sådan at hvis man søger på "e" kommer der ikke noget resultat bare fordi der er e i nogle af ordene.

ER det også muligt at filtrer nogle ord fra, så som: "er" og "for".
Her er hvad jeg har:

strSQL = "SELECT * FROM tabel1 WHERE"
strSQL = strSQL & " title LIKE '" &  strKeyword  & "'"
strSQL = strSQL & " OR beskrivelse LIKE '" &  strKeyword  & "'"
Avatar billede goose Nybegynder
07. september 2003 - 20:27 #1
Du kunne jo lave så der minimum skulle indtastes 2 karakterer i en søgning, længere kan du nok ikke komme ned, der er jo ord som sø, so, bi, m.v. :o)

/Goose
Avatar billede -mundi- Nybegynder
07. september 2003 - 20:32 #2
Lav en liste over almindelige ord som du vil ignorere, elle måske en liste over korte ord som du mener er relevante for netop dit website, og så check søge ordet med den tabel inden du sender brugeren videre til din søgning
Avatar billede eagleeye Praktikant
07. september 2003 - 20:32 #3
Ja man kan filtere nogle ord fra, men samtidig skal du lave om i søgningen da den ikke bare kan give den en liste "godt helbredet" men skal søge efter "godt" og "heldredet" så det skal skrives lidt om :

Så må du dele dinsøgestreng på på mellemrum og tilføje en like for hver og bytte enten AND eller OR imellem..:


<%
str =  Request.Form("Keyword")

'Fejn ulovlige ord
ulovligeord = "er|for|en|to"

Set regEx = New RegExp
regEx.Global = true
regEx.IgnoreCase = true
regEx.Pattern = "(^|[^a-z])" & ulovligeord & "([^a-z]|$)"
str = regEx.Replace (str,"")
Set regEx = Nothing

'Bygge SQL søgning op
soegArr = Split(str, " ")
sWhere = ""
for i = lbound(soegArr) to ubound(soegArr)
  if sWhere <> "" then sWhere = sWhere & " OR "
  sWhere = sWhere & " title like '%" & soegArr(i) & "%'"
  sWhere = sWhere & " OR beskrivelse like '% & soegArr(i) & "%'"
next

SQL = "SELECT * FROM tabel1 "
if sWhere <> "" then SQL = SQL & " where " & sWhere

response.write SQL
Avatar billede -mundi- Nybegynder
07. september 2003 - 20:32 #4
De var et svar :-)
Avatar billede jpv Nybegynder
07. september 2003 - 20:32 #5
Det er jo en løsning  på "E" har du et bud på de andre?
Avatar billede eagleeye Praktikant
07. september 2003 - 20:35 #6
Du kan også bygge et filter ind som fjerne alle ord under eksvis 3 bogstver
Avatar billede jpv Nybegynder
07. september 2003 - 20:45 #7
Hvordan vil du placer det ind i denne kode:

<%

strKeyword=Trim(Replace(Request.Form("soegtext"),"'",""))
if strKeyword = "" then strKeyword=Trim(Replace(Request.QueryString("soegtext"),"'",""))


intPage = Request("page")
If isNumeric(intPage) = False Or intPage < 1 Then
    intPage = 1
End If


Set rs = Server.CreateObject("ADODB.RecordSet")
'********** hvilken felt i hvilken tabel**************




strSQL = "SELECT * FROM tabel1 WHERE"
strSQL = strSQL & " title LIKE '" &  strKeyword  & "'"
strSQL = strSQL & " OR firma LIKE '" &  strKeyword  & "'"
strSQL = strSQL & " OR soeg1 LIKE '" &  strKeyword  & "'"
strSQL = strSQL & " OR soeg2 LIKE '" &  strKeyword  & "'"
strSQL = strSQL & " OR soeg3 LIKE '" &  strKeyword  & "'"
strSQL = strSQL & " OR soeg4 LIKE '" &  strKeyword  & "'"
strSQL = strSQL & " OR soeg5 LIKE '" &  strKeyword  & "'"
strSQL = strSQL & " OR beskrivelse LIKE '" &  strKeyword  & "'"



strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=sti til database"
rs.Open strSQL, strDSN, 1
If Not (rs.BOF Or rs.EOF) Then
  rs.PageSize = 5
    rs.AbsolutePage = intPage
    intRecCount = rs.PageSize
    intPageCount = rs.PageCount
    Response.Write "<b>Side " & intPage & " af " & intPageCount & "</b>"
    Do While Not rs.EOF And intRecCount > 0


If blnBGColor = True Then
            strBGColor = "CCDFF7"
            blnBGColor = False
        Else
            strBGColor = "ffffff"
            blnBGColor = True
        End If



         
%>

<br>

<table align="center" width="600px" bgcolor="<%=strBGColor%>">

<tr> <td >
<a href="http://<%=rs("url")%>" target="_blank"><B><%=rs("url")%></B></a> </td></tr>
<tr> <td ><%=rs("title")%></td></tr>
<tr> <td ><% = Left(rs("beskrivelse"),100)%></td></tr>
<tr> <td >Firma:<i> <%=rs("firma")%></i></td></tr>
</table>




<%
    intRecCount = intRecCount - 1
    rs.MoveNext
    Loop
End If
rs.Close
Set rs = Nothing

Response.Write "<p>Gå til side "
For intNum = 1 To intPageCount
    Response.Write "<a href=""resultat1.asp?page=" & intNum & "&soegtext=" & Server.URLencode(strKeyword) & """>" & intNum & "</a> "
Next

Response.Write "<p>"
If Clng(intPage) > 1 Then
    Response.Write "<a href=""resultat1.asp?page=" & intPage - 1 & "&soegtext=" & Server.URLencode(strKeyword) & """>&lt;&lt;</a>"
Else
    Response.Write "&lt;&lt;"
End If

Response.Write "&nbsp;"

If Clng(intPage) < Clng(intPageCount) Then
    Response.Write "<a href=""resultat1.asp?page=" & intPage + 1 & "&soegtext=" & Server.URLencode(strKeyword) & """>&gt;&gt;</a> "
Else
    Response.Write "&gt;&gt;"
End If
%>
Avatar billede eagleeye Praktikant
07. september 2003 - 20:50 #8
både med kort ord filter og ulovlige ord og split på mellemrum med søgnign på alel kolonner?
Avatar billede jpv Nybegynder
07. september 2003 - 20:53 #9
Meget gerne, jeg syntes ikke lige at jeg gennemskurer det.
Giver gerne flere point
Avatar billede eagleeye Praktikant
07. september 2003 - 20:55 #10
Er det bevidst du ikke har % med i dine LIKES ???

strSQL = strSQL & " OR soeg1 LIKE '" &  strKeyword  & "'"
Avatar billede eagleeye Praktikant
07. september 2003 - 20:55 #11
sådan:
strSQL = strSQL & " OR soeg1 LIKE '%" &  strKeyword  & "%'"
Avatar billede eagleeye Praktikant
07. september 2003 - 21:00 #12
Her er koden med de ting som vist, dog har jeg ikke tilføjet % i LIK delen:


<%

strKeyword=Trim(Replace(Request.Form("soegtext"),"'",""))
if strKeyword = "" then strKeyword=Trim(Replace(Request.QueryString("soegtext"),"'",""))

'Fejn ulovlige ord ulovligord er i variblen ulovligeord og skal adskilles med |
ulovligeord = "er|for|fuck"
Set regEx = New RegExp
regEx.Global = true
regEx.IgnoreCase = true
regEx.Pattern = "(^|[^a-zæøå\d])" & ulovligeord & "([^a-zæøå\d]|$)"
strKeyword = regEx.Replace (strKeyword,"")
Set regEx = Nothing
'Fjern korte ord
strArr = Split(strKeyword, " ")
strKeyword = ""
for i = lbound(strArr) to ubound(strArr)
  if len(strArr(i)) > 3 then strKeyword = strKeyword & strArr(i) & " "
next
strKeyword = Trim(strKeyword)


intPage = Request("page")
If isNumeric(intPage) = False Or intPage < 1 Then
    intPage = 1
End If


Set rs = Server.CreateObject("ADODB.RecordSet")
'********** hvilken felt i hvilken tabel**************

'Bygge SQL søgning op
soegArr = Split(strKeyword, " ")
sWhere = ""
for i = lbound(soegArr) to ubound(soegArr)
  if sWhere <> "" then sWhere = sWhere & " OR "  '<--- Kan skiftes til AND hvis alle søgeord SKAL findes
  sWhere = sWhere & "("
  sWhere = sWhere & " title LIKE '" &  soegArr(i)  & "'"
  sWhere = sWhere & " OR firma LIKE '" &  soegArr(i)  & "'"
  sWhere = sWhere & " OR soeg1 LIKE '" &  soegArr(i)  & "'"
  sWhere = sWhere & " OR soeg2 LIKE '" &  soegArr(i)  & "'"
  sWhere = sWhere & " OR soeg3 LIKE '" &  soegArr(i)  & "'"
  sWhere = sWhere & " OR soeg4 LIKE '" &  soegArr(i)  & "'"
  sWhere = sWhere & " OR soeg5 LIKE '" &  soegArr(i)  & "'"
  sWhere = sWhere & " OR beskrivelse LIKE '" &  soegArr(i)  & "'"
  sWhere = sWhere & ")"
next

strSQL = "SELECT * FROM tabel1 "
if sWhere <> "" then strSQL = strSQL & " WHERE " & sWhere


strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=sti til database"
rs.Open strSQL, strDSN, 1
If Not (rs.BOF Or rs.EOF) Then
  rs.PageSize = 5
    rs.AbsolutePage = intPage
    intRecCount = rs.PageSize
    intPageCount = rs.PageCount
    Response.Write "<b>Side " & intPage & " af " & intPageCount & "</b>"
    Do While Not rs.EOF And intRecCount > 0


If blnBGColor = True Then
            strBGColor = "CCDFF7"
            blnBGColor = False
        Else
            strBGColor = "ffffff"
            blnBGColor = True
        End If
%>

<br>

<table align="center" width="600px" bgcolor="<%=strBGColor%>">

<tr> <td >
<a href="http://<%=rs("url")%>" target="_blank"><B><%=rs("url")%></B></a> </td></tr>
<tr> <td ><%=rs("title")%></td></tr>
<tr> <td ><% = Left(rs("beskrivelse"),100)%></td></tr>
<tr> <td >Firma:<i> <%=rs("firma")%></i></td></tr>
</table>




<%
    intRecCount = intRecCount - 1
    rs.MoveNext
    Loop
End If
rs.Close
Set rs = Nothing

Response.Write "<p>Gå til side "
For intNum = 1 To intPageCount
    Response.Write "<a href=""resultat1.asp?page=" & intNum & "&soegtext=" & Server.URLencode(strKeyword) & """>" & intNum & "</a> "
Next

Response.Write "<p>"
If Clng(intPage) > 1 Then
    Response.Write "<a href=""resultat1.asp?page=" & intPage - 1 & "&soegtext=" & Server.URLencode(strKeyword) & """>&lt;&lt;</a>"
Else
    Response.Write "&lt;&lt;"
End If

Response.Write "&nbsp;"

If Clng(intPage) < Clng(intPageCount) Then
    Response.Write "<a href=""resultat1.asp?page=" & intPage + 1 & "&soegtext=" & Server.URLencode(strKeyword) & """>&gt;&gt;</a> "
Else
    Response.Write "&gt;&gt;"
End If
%>
Avatar billede jpv Nybegynder
07. september 2003 - 21:05 #13
hvad gør % i like?
Mange tak
Avatar billede eagleeye Praktikant
07. september 2003 - 21:11 #14
Det skulle gøre sådan at den søger efter ord i hele teksten og ikke præsis =

nanv LIKE '%a'    finder alle som slutter på a
nanv LIKE 'a%'    finder alle som starter på a
nanv LIKE '%a%'    finder alle som indeholder a
Avatar billede jpv Nybegynder
07. september 2003 - 21:23 #15
Tak igen, mange gange
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