sawMedlem sedan mars 20011 880 inlägg Jag har hittat ett litet fint script för en sökmotor, men det finns en del buggar som jag gärna skulle vilja ha hjälp med.
if LEN(request("keyword"))>=3 then
if request("srch") = "yes" then
dim count, nWord, spWord, andWord, orWord
' set up variables
word=replace(trim(request("keyword")),"'", "''")
' trim spaces and replace the single quote
if instr(word, "and") then
' check Boolean of and
andW = true
Word = split(word,"and")
'now get all the words separated by and into an array
for i = 0 to ubound(andWord)
if i <> ubound(andWord) then
kW = "'%" & andWord(i) & "%'"
'set up sql statement
elseif i = ubound(andWord) then
' when it hits the end
kW = kW &"'%" & andWord(i) & "%' and "
' add the last sql statement
end if
next
elseif instr(word,"or") then
orW = true
orWord = split(word,"or")
for i = 0 to ubound(orWord)
if i <> ubound(orWord) then
kW = "'%" & orWord(i) & "%' and "
elseif i = ubound(orWord) then
kW = kW & "'%" & orWord(i) & "%'"
end if
next
elseif instr(word," ") then
spW = true
spWord = split(word," ")
for i = 0 to ubound(spWord)
if i <> ubound(spWord) then
kW = "'%" & spWord(i) & "%' or "
elseif i = ubound(spWord) then
kW = kW & "'%" & spWord(i) & "%'"
end if
next
else
'There is no Boolean value or Blank in the search word<br>
kW = "'%" & word & "%'"
end if
Problem:
Om jag försöker att använda mig av and då kommer detta medellande:
Körningsfel i Microsoft VBScript (0x800A000D)
Inkompatibla typer: 'ubound'
/Hemsidor/Idrottsportalen/Idrottsportalen_filer/Forum/template.asp, line 52
rad 53 är for i = 0 to ubound(andWord)
Man skall också kunna skriva text rakt in t ex "fotboll är kul", men då blir det ett annat fel, den visar allt som finns i databasen.
Några tips?
Första frågan löses så här:
andWord = split(word,"and")
istället för
Word = split(word,"and")
@ndersMedlem sedan juni 200032 969 inlägg Angående den andra frågan:
Det man gör när SQL-frågor returnerar fel saker är att skriva ut den färdiga SQL-frågan. Det är helt omöjligt att gissa vad som är fel.
sawMedlem sedan mars 20011 880 inlägg Jag hitta ett fel ...
andWord = split(word,"and")
for i = 0 to ubound(andWord)
...men då uppstod nästa fel.
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel
(operator saknas) i frågeuttrycket 'rubrik like '%boll %''% rund%'
and or inlagg like '%boll %''% rund%' and'.
/Hemsidor/Idrottsportalen/Idrottsportalen_filer/Forum/template.asp, line 97
'SQLEN
sql = "select * from t_forum where rubrik like " & kW & " or inlagg like " & kW
Några bra tips?
@ndersMedlem sedan juni 200032 969 inlägg Visa den kompletta SQL-frågan istället. Lättare både för dig och andra att felsöka.
sawMedlem sedan mars 20011 880 inlägg Det är ju den som jag visade
sql = "select * from t_forum where rubrik like " & kW & " or inlagg like " & kW
kod byggs ju upp dynamiskt och läggs in i variablem kW
@ndersMedlem sedan juni 200032 969 inlägg Den kompletta SQL-frågan visas om du skriver ut den med Response.write...
sawMedlem sedan mars 20011 880 inlägg Ursäkta, jag missförstod.
Jag hittade lite fel i 'and'functionen så den sql:en blir
select * from t_forum where rubrik like '%boll %' and '% rund%' or inlagg like '%boll %' and '% rund%'
..och den ser ju rätt ut nu och ger rätt antal träffar.
när det gäller 'or' functionen:
select * from t_forum where rubrik like '%boll %' or '% rund%' or inlagg like '%boll %' or '% rund%'
..så ser den också rätt ut, men den tar fram allt i databasen.
När det gäller den sista, om jag söker på 'boll hand rund'
select * from t_forum where rubrik like '%boll h%' and '% rund%' or inlagg like '%boll h%' and '% rund%'
..då ser man att den hugger av andra ordet.
Frågan är väll också om det skall vara operatorn 'and', det kanske skulle byttas mot 'or'?
Om jag bara söker på ett ord 'handboll'
else
'There is no Boolean value or Blank in the search word<br>
kW = "'%" & word & "%'"
end if
'SQL
select * from t_forum where rubrik like '%h%' and '%boll%' or inlagg like '%h%' and '%boll%'ORDER BY rubrik
och här ser det lustigt ut.
[REDIGERAT]
Om jag använder sokördet 'fotboll and mål' visas allt i databasen
Om jag använder sokördet 'fotboll or mål' visas allt i databasen
Om jag använder sokördet 'fotboll mål' visas två poster, vilket torde vara korrekt.
Någonting lustigt gör att ifallen and/or så tas allting fram.
J.N.Medlem sedan apr. 20031 660 inlägg HEJ!
Jag ger mig inte på koden, men har du uppmärksammat vad det står i ... like '%boll h%' and '% rund%' or...?
När du söker på "boll hand rund" delas det "boll h and rund", och det vill du säkert inte. Då innebär säkert det extra and att du får med alla poster på något sätt.
I fallet "handboll", lättare se där, ger alla poster med "h och boll eller med h", dvs du får säkert inte alla, men många.
sawMedlem sedan mars 20011 880 inlägg Du har säkert rätt, men jag har kommit på felet, men vet inte hur jag skall fixa det.
Titta här:
if instr(word, "and") then
Om jag nu skriver handboll, så hittar den ju 'and' och därför
så måste ju resultatet bli '%h%' AND '% AND boll%'
osv.
Det är vad jag förstår det stora problemet.
Hur bör jag lösa det?
@ndersMedlem sedan juni 200032 969 inlägg Se till att du letar efter ordet and istället, dvs:
if instr(word, " and ") then
Edit: var hittade du förresten scriptet? Jag blir väldigt förvånad över att sånt här skräp läggs ut för andra att använda... :x
sawMedlem sedan mars 20011 880 inlägg Det gjorde ingen skillnad, tyvärr :-(
Jag minns inte var jag hittade scriptet, det var för något år sedan.
Det jag har bekymmer med är ju att bygga upp strängen, då har kanske någon url där jag kan kolla om det passar?
@ndersMedlem sedan juni 200032 969 inlägg Du måste se till att du gör spliten på " and " också, och inte bara ha det i if-satsen. Det är spliten som är det väsentliga.
sawMedlem sedan mars 20011 880 inlägg Tack för att du inte ger upp @nders.
Kodsnutten ser ut:
if instr(word, " and ") then
andW = true
andWord = split(word," and ")
for i = 0 to ubound(andWord)
if i <> ubound(andWord) then
kW = "'%" & andWord(i) & "%' and "
elseif i = ubound(andWord) then
kW = kW &"'%" & andWord(i) & "%'"
end if
next
Om jag nu söker på handboll och fotboll så blir sql:en
select * from t_forum where rubrik like '%boll %' and '% fotboll%' or inlagg like '%boll %' and '% fotboll%'ORDER BY rubrik
Som du ser så klipper den av hand (ibland så finns h:et med)
Den klipper tydligen ord som innehåller 'and' bol och kul går bra.
sawMedlem sedan mars 20011 880 inlägg Hurra , jag har lyckats nu, jag utgick ifrån vad @nders påpekade, och petade lite, sen har jag fått det mesta att fungera.
Vad som inte fungerar är om man har dessa sökord:
fotboll and handboll or kulspel
Då blir SQL:en
select * from t_forum where rubrik like '%fotboll%' and '%
handboll or kulspel%' or inlagg like '%fotboll%' and '%handboll or
kulspel%' ORDER BY rubrik DESC
...men det är kanske att begära för mycket?