Avatar billede jack_daniels Nybegynder
13. oktober 2001 - 18:44 Der er 23 kommentarer og
2 løsninger

Søg på mere end et ord, f.eks. \"togvogn+lokomotiv\"

Hejsa

Jeg sidder og sysler lidt med en side om modeltog, og jeg har ikke rigtig så meget styr på ASP. Jeg skal dog lave et \"katalog\" over togsæt, med lokomotiver, skinner, vogne osv.

Til det, skal jeg bruge en søgemaskine, som kan så på mere end et ord, ligesom på jubii, hvor man kan skrive \"lokomotiv+vogne\" eller \"lokomotiv-vogne\"

Er der nogle der kan lave det til mig?

MVH
Finn
Avatar billede food4u.dk Nybegynder
13. oktober 2001 - 18:44 #1
Lytter med...
Avatar billede bjarke-b Nybegynder
13. oktober 2001 - 18:49 #2
Det kan godt lade sig gøre, jeg kan lave et lille eksempel hvor man kan benytte +.

Venter tilbage
Avatar billede jack_daniels Nybegynder
13. oktober 2001 - 18:56 #3
bjarke--> det lyder stort :o), mange tak

food4u.dk--> nu er det lang tid siden jeg har været på siden, men er det ikke lidt unfair, at du \"lytter med\", på et spørgsmål jeg giver 3000 point for?
Avatar billede food4u.dk Nybegynder
13. oktober 2001 - 19:01 #4
jack > tjo, men havde det være anderledes, hvis jeg var kommet om en uge og kigget?

Efter min mening går det ud på at hjælpe hinanden her på eksperten, håber det er ok med dig :o)
Avatar billede food4u.dk Nybegynder
13. oktober 2001 - 19:02 #5
ups, skulle ikke være et svar, sorry
Avatar billede nute Nybegynder
13. oktober 2001 - 19:03 #6
jack_daniels >> for det første. 3000 points for et sånt spørsmål er jo *helt* hårreisende. For det andre så kan du ikke annet enn tiltrekke brukere når du oppretter et spørsmål til 3000 points. For det tredje så kan du ikke forhindre at noen \"lytter med\", man kan jo uansett når som helst lese svaret som blir postet her inne.

Jeg foreslår at du setter antall points ned til 300. For 3000 points så skulle man kreve noe *langt* større enn en simpel søkemaskin.

/nute
Avatar billede jack_daniels Nybegynder
13. oktober 2001 - 19:13 #7
nute--> Hmm, jeg har kigget lidt rundt her på eksperten, hvor der er nogle der har stillet et spårgsmål noget lignende, og de har satset fra 200-700, og så ender det med at det bliver noget med at der er en der skal betales til at lave det. Og det vil jeg ikke, jeg ved ikke engang om min side bliver lagt ud, så derfor vil jeg ikke betale noget (penge) for det!
(Man kan vidst ikke sætte point summen ned)
Avatar billede nute Nybegynder
13. oktober 2001 - 19:25 #8
det du skal ha tak i rimelig simpelt å lage. Du skal bare ta imot en søkestreng og analysere den for noen tegn. Det er noen simple if\'s du skal skrive, og det er ærlig talt *ikke* verdt 3000 points.

Joda du kan sette ned poengsummen når du aksepterer. Du aksepterer et svar, men snupper de fleste poeng selv. Det er sånne innlegg som dette som ødelegger ideologien til eksperten.

/nute
Avatar billede jack_daniels Nybegynder
13. oktober 2001 - 19:30 #9
nute--> men hvis det er ikke er så mange point værd, hvorfor er ingen af de andre tilsvarende spørgsmål så blevet besvaret?
Avatar billede nute Nybegynder
13. oktober 2001 - 19:33 #10
jack_daniels >> det kan jeg ikke svare på, for jeg har ikke sett dem.
Avatar billede eagleeye Praktikant
13. oktober 2001 - 19:42 #11
Jeg har et script som kan noget i den stil:

Du kan skrive OG, ELLER, og IKKE.

Prøv på www.eagleeye.dk/sog du skal vælge hvilke felter du vil søge i. Vælg emne og vedr. Så prøv at søg på:
Tog OG vogn
Tog IKKE vogn
Tog eller vogn
Avatar billede jack_daniels Nybegynder
13. oktober 2001 - 19:56 #12
Det er noget der virker, hvad skal du have for kode?

Hvis nu jeg sætter mig ind i ASP, kan jeg så ikke skifte OG ud med +, IKKE ud med -, og så eller med et eller andet?
Avatar billede eagleeye Praktikant
13. oktober 2001 - 20:09 #13
Ikke noget specielt jeg smid et link så du kunne se om det var sådan noget du søgte.
Jeg syntes også at 3000 points er vildt overdrevet :). Koden her, er lavet til et andet spm her på eksperten og han gav 300 points for det:

Den består af to filer Default.asp:

<html>
<head>
<title></title>
</head>
<body>
<center>
<table border=1>
<form method=\"post\" action=\"result.asp\">
  <tr><td>Søg:</td><td><input name=\"keyword\"></td></tr>
  <tr><td>Vælg felter:</td><td><input type=\"checkbox\" name=\"felter\" value=\"vedr\">Vedr</td></tr>
  <tr><td>&nbsp;</td><td><input type=\"checkbox\" name=\"felter\" value=\"emne\">Emne</td></tr>
  <tr><td>&nbsp;</td><td><input type=\"checkbox\" name=\"felter\" value=\"handelsetekst.tekst\">Handelsetekst</td></tr>   
<!--  <tr><td>&nbsp;</td><td><input type=\"checkbox\" name=\"felterHtbl\" value=\"handelsetekst.tekst\">Handelsetekst</td></tr>--> 
<!-- Indsæt flere sæge felter her --> 
  <tr><td colspan=2 align=\"center\"><input type=\"submit\" value=\"Søg\" name=\"Action\"></td></tr>
</form>
</table>
</form>
<br>
<br>
hej download koden + mini databse til dette eks <a href=\"sog.zip\">her</a>.
</center>
</body>
</html>

-*-*-*-*-*-*-*- Og  result.asp:

<% Response.Buffer = True %>
<html>
<head>
<title>Søgeresultat</title>
</head>
<body>
<center>
<%
\' Henter værdien fra sidste side
strKeywordForm = Trim(Request.Form(\"Keyword\"))
If Len(strKeywordForm) = 0 Then \' Hvis der ikke er skrevet i feltet
  Response.Clear
  Response.Redirect(\"default.asp\")
End if 
strKeywordForm = Replace(strKeywordForm,\"\'\",\"\'\'\")
strKeywordForm = Replace(strKeywordForm,\"  \",\" \")

nFeltItems = Request.Form(\"felter\").Count
If nFeltItems = 0 then \' Hvis der ikke er skrevet i feltet
  Response.Redirect(\"default.asp\")
End If
wordArray = Split(strKeywordForm,\" \",-1)

firstTime = true
lastFunctionWord = \"\"
changeFunction = false
for wc = LBound(wordArray) to UBound(wordArray)
  if firstTime = true then
    firstTime = false
    if nFeltItems > 0 then
    strSQL = \"((\" & Request.Form(\"felter\")(1) & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
    for i = 2 to nFeltItems
      strSQL = strSQL & \" OR \" & Request.Form(\"felter\")(i) & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
    next
    strSQL = strSQL & \")\"
    end if
  else
    if Ucase(wordArray(wc)) = \"OG\" then
      if (lastFunctionWord = \"ELLER\") and (changeFunction = false) then
        lastFunctionWord = \"OG\"
        strSQL = strSQL & \") AND (\"
        changeFunction = true
      else
        lastFunctionWord = \"OG\"
        strSQL = strSQL & \" AND \"
        changeFunction = false
      end if
    elseif Ucase(wordArray(wc)) = \"ELLER\" then
      if lastFunctionWord = \"OG\" and changeFunction = false then
        lastFunctionWord = \"ELLER\"
        strSQL = strSQL & \") OR (\"
        changeFunction = true
      else
        lastFunctionWord = \"ELLER\"
        strSQL = strSQL & \" OR \"
        changeFunction = false
      end if
    elseif Ucase(wordArray(wc)) = \"IKKE\" then
      strSQL = \"(\" & strSQL & \")\"
      strSQL = strSQL & \") AND (\"
      lastFunctionWord = \"IKKE\"
    else
      if lastFunctionWord = \"IKKE\" then
        str_NOT = \" NOT \"
        function_Word = \" AND \"
      else
        str_NOT = \"\"
        function_Word = \" OR \"
      end if
      if nFeltItems > 0 then
      strSQL = strSQL & \"(\" & Request.Form(\"felter\")(1) & str_NOT & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
      for i = 2 to nFeltItems
        strSQL = strSQL & function_Word & Request.Form(\"felter\")(i) & str_NOT & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
      next
      strSQL = strSQL & \")\"
      end if
    end if
  end if
next
strSQL = strSQL & \")\"

strDSN = \"Data Source=d:\\home\\eagleeyedk\\db\\db5.mdb;Provider=Microsoft.Jet.OLEDB.4.0;\"
\'strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\".\\db\\db5.mdb\")
Set myConn = Server.CreateObject(\"ADODB.Connection\")
Set rs = Server.CreateObject(\"ADODB.RecordSet\")
myConn.Open strDSN

strSQLWhere = strSQL

\'DENNE SQL HVIS DER ER TO TABLLER SOM SKAL JOINES
strSQL = \"SELECT *, tabel_navn.ID as tabelID \"
strSQL = strSQL & \"FROM tabel_navn LEFT JOIN Handelsetekst ON tabel_navn.cpr = Handelsetekst.cpr\"
strSQL = strSQL & \" WHERE \" & strSQLWhere

\'DENNE SQL HVIS DER KUN ER EN TABEL
\'strSQL = \"SELECT * FROM tabel_navn WHERE \" & strSQLWhere

rs.Open strSQL, myConn, 1, 3
Response.write \"Antal fundet : \" & rs.RecordCount

if not (rs.BOF and rs.EOF) then
  Response.Write \"<table border=1>\"
  Response.Write \"<tr><td>ID</td><td>Emne</td><td>Vedr</td><td>Handelsetekst</td></tr>\"
  do while not rs.EOF
    Response.Write \"<tr>\"
    Response.Write \"<td>\" & rs(\"tabelID\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"Emne\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"Vedr\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"tekst\") & \"</td>\"
    Response.Write \"</tr>\"
    rs.MoveNext
  loop
  Response.Write \"</table>\"
end if

rs.Close

myConn.Close
Set myConn = Nothing
%>
</center>
</body>
</html>

Jeg vil meget gerne hjælpe dig vidre med det, men det bliver ikke iaften, jeg er på vej ud af døres.

Du kan rette OG/ELLER til + og IKKE til - i koden.

Bemærk SQL sætningen som jeg bruger JOINer to tabller så hvis du bare har en table brugen den som er udkommenteret lige neden under. 
Som det er lige nu får søge-koden kolonne navne fra Default.asp siden checkboxe så de skal ændre eller skal det laves om til at den søger i nogle faste kolonner.

Prøv at kikke lidt på det.
Avatar billede jack_daniels Nybegynder
13. oktober 2001 - 20:17 #14
eagle--> Kigger lige lidt på det
Avatar billede eagleeye Praktikant
14. oktober 2001 - 21:29 #15
Jeg har lavet et noget nyt kode som kan tager + og - i sted for ELLER og IKKE. : www.eagleeye.dk/sog
Avatar billede jack_daniels Nybegynder
14. oktober 2001 - 21:34 #16
hej eagleeye

Jeg har fået det til at virke, opgav det der med plus og minus, da jeg ikke kunne finde på noget at udskifte \"eller\" med :o)

Tusind tak for hjælpen

/Finn
Avatar billede jack_daniels Nybegynder
14. oktober 2001 - 21:35 #17
laver lige et svar, så jeg kan give eagleeye 300 point, og mig selv resten, det var vidst det der var stemning for?
Avatar billede eagleeye Praktikant
14. oktober 2001 - 21:35 #18
ELLER svare i min udgave med + og - til mellemrum

bil båd    giver bil OR båd
Avatar billede jack_daniels Nybegynder
14. oktober 2001 - 21:38 #19
nårja, selvfølgelig :o)

er det muligt at lave, så man ikke skal vælge et felt?

Jeg belv nemlig nød til at lave sådan et skjult html felt, som så sendte \"felter=katalog\" til asp´en?
Avatar billede eagleeye Praktikant
14. oktober 2001 - 21:38 #20
Altså det jeg ville skrive var:
bil båd +hus  giver  ((bil OR båd) AND hus)
Avatar billede eagleeye Praktikant
14. oktober 2001 - 21:39 #21
Ja det er mulige det kan bare ligges i result.asp filen.
Avatar billede jack_daniels Nybegynder
14. oktober 2001 - 21:43 #22
ok, takker mange gange igen

er 300 point nok?
Avatar billede eagleeye Praktikant
14. oktober 2001 - 21:44 #23
Ja det helt fint med mig.
Avatar billede jack_daniels Nybegynder
14. oktober 2001 - 21:46 #24
de var der...
Avatar billede eagleeye Praktikant
14. oktober 2001 - 21:54 #25
I den nye result.asp er felternes navne i et array. Hvis du vil se kan jeg godt lige smide kode her... ca 200 linier kode.
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