26 messaggi dal 06 settembre 2002
Ciao, ho trovato un interessante motore di ricerca (si tratta di una pagina in asp + un database mdb).
L'ho modificato graficamente ma oltre al classico modo di ricerca ci ho anche aggiunto un metodo di ricerca per CATEGORIA. Se si inserisce un termine di ricerca il motore trova i records con quella parola, se si seleziona una categoria il motore trova i records che si trovano in quella categoria.... il problema è che se invece si inserisce sia una parola che una categoria... il motore non trova niente!!!!!
Chi saprebbe darmi una mano??


qui sotto riporto parte del codice colpevole(scusate la lunghezza ma.... non ho nemmeno la più pallida idea di dove si trovi la parte interessata)

<%
'Dimension variables
Dim adoCon 'Database Connection Variable
Dim adoRec 'database Recordset Variable
Dim strAccessDB 'Holds the Access Database Name
Dim strSQL 'Database query sring
Dim intRecordPositionPageNum 'Holds the record position
Dim intRecordLoopCounter 'Loop counter for displaying the database records
Dim intTotalRecordsFound 'Holds the total number of records in the database
Dim intTotalNumPages 'holds the total number of pages in the database
Dim intLinkPageNum 'Holds the page number to be linked to
Dim strSearchKeywords 'Holds the keywords input by the user to be searched for
Dim strTitle 'Holds the URL Title
Dim strcategoria
Dim strDate_Entered
Dim strURL 'Holds the URL
Dim strDescription 'Holds the description of the URL
Dim sarySearchCat
Dim sarySearchDate
Dim sarySearchWord 'Holds the keywords for the URL
Dim intSQLLoopCounter 'Loop counter for the loop for the sql query
Dim intSearchWordLength 'Holds the length of the word to be searched
Dim blnSearchWordLenthOK 'Boolean set to false if the search word length is not OK
Dim intRecordDisplayFrom 'Holds the number of the search result that the page is displayed from
Dim intRecordDisplayTo 'Holds the number of the search result that the page is displayed to
Dim intRandomRecordNumber 'Holds a random number used to display a random URL


'Declare constants
' ----------------- Change the following line to the number of entries you wish to have on each page and miniumum word length ------------------------

Const intRecordsPerPage = 10 'Change this number to the amount of entries to be displayed on each page
Const intMinuiumSesrchWordLength = 2 'Change this to the minimum word length to be searched on

'-------------------------------------------------------------------------------------------------------------------------------------


'Error handler
On error resume next


'If this is the first time the page is displayed then the page position is set to page 1
If Request.QueryString("PagePosition") = "" Then
intRecordPositionPageNum = 1

'Else the page has been displayed before so the page postion is set to the Record Position number
Else
intRecordPositionPageNum = CInt(Request.QueryString("PagePosition"))
End If



'Read in the search words to be searched
sarySearchWord = Split(Trim(Request.QueryString("search")), " ")
sarySearchCat = Split(Trim(Request.QueryString("categoria")), " ")

'Read in all the search words into one variable
strSearchKeywords = Trim(Request.QueryString("search"))
strSearchcat = Trim(Request.QueryString("categoria"))


'Replace any less than or greater than signs with the HTML equivalent (stops people entering HTML tags)
strSearchKeywords = Replace(strSearchKeywords, "<", "<")
strSearchKeywords = Replace(strSearchKeywords, ">", ">")



'Initalise the word search length variable
blnSearchWordLenthOK = True

'Loop round to check that each word to be searched has more than the minimum word length to be searched
For intLoopCounter = 0 To UBound(sarySearchWord)

'Initialise the intSearchWordLength variable with the length of the word to be searched
intSearchWordLength = Len(sarySearchWord(intLoopCounter))

'If the word length to be searched is less than or equal to min word length then set the blnWordLegthOK to false
If intSearchWordLength <= intMinuiumSesrchWordLength Then
blnSearchWordLenthOK = true
End If
Next





'Initalise the strSQL variable with an SQL statement to query the database
strSQL = "SELECT * FROM vhs "


'If the user has selected to search any words then intalise the strSQL statement to search for any words in the database
If Request.QueryString("mode") = "anywords" Then

'Search for the first search word in the URL titles

strSQL = strSQL & "WHERE Title LIKE '%" & sarySearchWord(0) & "%'"
strSQL = strSQL & "WHERE categoria LIKE '%" & sarySearchCat(0) & "%'"

'Loop to search for each search word entered by the user
For intSQLLoopCounter = 0 To UBound(sarySearchWord)
strSQL = strSQL & " OR Title LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'"
strSQL = strSQL & " OR Keywords LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'"
strSQL = strSQL & " OR Description LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'"
strSQL = strSQL & " OR categoria LIKE '%" & sarySearchcat(intSQLLoopCounter) & "%'"
Next

End If


'If the user has selected to search for all words then intalise the strSQL statement to search for entries containing all the search words
If Request.QueryString("mode") = "allwords" Then

'Search for the first word in the URL titles
strSQL = strSQL & "WHERE Title LIKE '%" & sarySearchWord(0) & "%'"
strSQL = strSQL & "WHERE categoria LIKE '%" & sarySearchCat(0) & "%'"


'Loop to search the URL titles for each word to be searched
For intSQLLoopCounter = 1 To UBound(sarySearchWord)
strSQL = strSQL & " AND Title LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'"

Next

'OR if the search words are in the keywords
strSQL = strSQL & " OR Keywords LIKE '%" & sarySearchWord(0) & "%'"

'Loop to search the URL keywords for each word to be searched
For intSQLLoopCounter = 1 To UBound(sarySearchWord)
strSQL = strSQL & " AND Keywords LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'"
Next

'Or if the search words are in the title
strSQL = strSQL & " OR Description LIKE '%" & sarySearchWord(0) & "%'"

'Loop to search the URL description for each word to be searched
For intSQLLoopCounter = 1 To UBound(sarySearchWord)
strSQL = strSQL & " AND Description LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'"
Next

'Oppure se la ricerca è nella categoria (aggiunto da Martin Sarsini)
strSQL = strSQL & " OR categoria LIKE '%" & sarySearchCat(0) & "%'"

'Loop to search the URL description for each word to be searched
For intSQLLoopCounter = 1 To UBound(sarySearchCat)
strSQL = strSQL & " AND categoria LIKE '%" & sarySearchCat(intSQLLoopCounter) & "%'"
Next

End If


'If the user has selected to see newly enetred URL's then order the search results by date decending
If Request.QueryString("mode") = "new" Then

'Order the search results by the date entered into the database decending
strSQL = strSQL & " ORDER By Date_Entered DESC"

'Else order the serch results by the number of click through hits decending
Else
'Order the search results by the number of click through hits decending (most popular sites first)
strSQL = strSQL & " ORDER By Date_Entered DESC"
End If




'Initialise the strAccessDB variable with the name of the Access Database
strAccessDB = "ciak"

'Create a connection odject
Set adoCon = Server.CreateObject("ADODB.Connection")
Set adoRec = Server.CreateObject("ADODB.Recordset")

'Open connection to the database driver
strCon = "DRIVER={Microsoft Access Driver (*.mdb)};"

'Open Connection to database
strCon = strCon & "DBQ=" & server.mappath("mdb-database/ciak.mdb")


"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("../mdb-database/forum.mdb") '## MS Access 97

Grazie a tutti coloro che hanno perso tempo nel leggere il mio posto e un enorme grazie a chi mi aiuterà
Ciao ciao


Magari evita di mandare tutto il codice, ma solo la parte incriminata. A prima vista direi che cerca O in un campo O nell' altro. E' sufficiente aggiungere la clausola OR nella query, ad esempio:

SELECT * FROM utenti WHERE (nome LIKE '%paol%' OR cognome LIKE '%paol%') ORDER BY ID




"This message was written using 100% recycled electrons"
26 messaggi dal 06 settembre 2002
sì scusa... ma il problema era che io non sapevo neppure qual'era il punto incriminato ;)
Cmq ora proverò e poi vi farò sapere se ci riesco o meno
2.907 messaggi dal 15 maggio 2001
Contributi
Scusami tanto Diaz ma tu vieni qui,posti tutto sto po po' di roba e poi non hai nessun problema ???

Robe da matti!!!!

26 messaggi dal 06 settembre 2002
ho provato a fare come mi hai detto ma non ci sono riuscito.
Scusa, forse mi sono spiegato bene, oppure non mi sono spiegato per niente
Mettiamo che io voglia cercare il film della carica dei 101 ho tre possibilità di cercarlo
1) inserisco "carica dei 101" e me lo trova
2) faccia la ricerca per categoria, in questo caso "cartoni animati"
3) inserisco "carica dei 101" + seleziono categoria "cartoni animati"
Io vorrei riuscire a fare proprio questa terza possibilità.

Premetto che nel db ogni record è inserito nella stessa tabella e contiene oltre al titolo una descrizione e la categoria di appartenenza

Cmq scusatemi ancora, forse sono un po' presuntuoso... ma non so chi altro mi potrebbe aiutare
2.907 messaggi dal 15 maggio 2001
Contributi
Devi fare una query del tipo che ti ha suggerito ras 78

Se vuoi che la ricerca avvenga per mezzo dell'una o dell'altra opzione fai:

SELECT * FROM nometabella WHERE film LIKE '%"& nomecampo & "%' OR cartoni like'%"nomecampo"%' ORDER BY ID

Se invece vuoi una ricerca su entrambi i campi fai:


SELECT * FROM nometabella WHERE film LIKE '%"& nomecampo & "%' AND cartoni like'%"nomecampo"%' ORDER BY ID

Rome Webmaster


26 messaggi dal 06 settembre 2002
e dai! possibile che nessuno lo sa!?
54 messaggi dal 06 settembre 2002
crea una stringa sql che vada bene per tutti i due tipi di ricerca

strsql=" select titolo from tabella"

poi aggiungi il tipo di ricerca desiderata

if categoria<>0 then
strsql = strsql & " where cat=" &(nome variabile)
end if

if titolo<> 0 then
strsql = strsql & " where titolo=" &(nome variabile)
end if

ok?
credo che sia questo ciò che volevi

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.