[ASP] Motore di ricerca interno su 2 tabelle

Discussione in 'Classic ASP' iniziata da djjunior, 12 Aprile 2018.

  1. djjunior

    djjunior Utente Attivo

    Registrato:
    24 Luglio 2004
    Messaggi:
    74
    Mi Piace Ricevuti:
    1
    Punteggio:
    8
    Salve,
    potete suggerirmi qualche script in asp per la creazione di un motore di ricerca interno che faccia la ricerca su 2 tabelle contemporaneamente, il db è mysql.
    Grazie 1000
     
  2. djjunior

    djjunior Utente Attivo

    Registrato:
    24 Luglio 2004
    Messaggi:
    74
    Mi Piace Ricevuti:
    1
    Punteggio:
    8
    Salve
    non sono come uscire da questo problema, dovrei fare un motore di ricerca interno al sito su 2 tabelle (diverse) contemporanemente le tabelle sono composte tipo cosi:
    TABELLA 1
    id, nome colonna1, etc
    1, testo1
    2, testo2
    3, testo3

    TABELLA 2
    id, nome colonna23, nome colonna56
    1, testo1 , testo1
    2, testo2 , testo2
    3, testo3 , testo3

    Il db è mysql

    E questo script:
    Codice:
    
    <%
    page = Cint(request.querystring("page"))
    if page = 0 then page = 1
    
    database = "Sql123456_4"
    call dbConnect(objConn, database)
    'Totale dei record
    
    sek = request.form("keywords")
    qstring = "keywords=" & server.URLEncode(sek)
    
    function fixSQL(TheString)
        TheString = replace(TheString,"'","''")   
    fixSQL = TheString
    end function
    
    strSQL = "SELECT COUNT(*) as tot FROM (SELECT id, NOME COLONNA1 FROM tabella1 WHERE NOME COLONNA1 LIKE '%" & sek & "%'       UNION SELECT id, NOME COLONNA23, NOME COLONNA56, FROM tabella2 WHERE NOME COLONNA23 LIKE '%" & sek & "%' OR NOME COLONNA56 LIKE '%" & sek & "%'         ) as total"
    Set objRS = objConn.Execute(strSQL)
    
    if not objRs.eof then
    tot_record = Cint(objRS("tot"))
    else
    tot_record=0
    end if
    set objRS = nothing
    
    
    pageSize = 15
    
    inizio = (page - 1) * pageSize
    
    pagine_totali = tot_record / pageSize
    
    if pagine_totali - CInt(pagine_totali) > 0 then
    pagine_totali = CInt(pagine_totali + 1)
    else
    pagine_totali = CInt(pagine_totali)
    end If
    
    strSQL = "SELECT * FROM (SELECT id, NOME COLONNA1 FROM tabella1 WHERE NOME COLONNA1 LIKE '%" & sek & "%' UNION SELECT id, NOME COLONNA23, NOME COLONNA56, FROM tabella2 WHERE NOME COLONNA23 LIKE '%" & sek & "%' OR NOME COLONNA56 LIKE '%" & sek & "%'         ) as total order by id desc LIMIT "& inizio &","& pageSize
    
    Set stRS = server.CreateObject("ADODB.Recordset")
    stRS.Open strSQL, objConn
    
    if tot_record > 0 then
    for i=1 to PageSize
    if strs.eof<>true and strs.bof<>true then
    
    %>
    
    i risultati devono essere:
    NOME DELLA COLONNA dove è stata trovare la parola cercata
    + l'id della stessa colonna dove è stata trovare la parola cercata
    
    
    <%
    stRS.movenext
    end if
    next
    else
    
    %>
    
    Non ci sono prodotti  con il termine cercato
    
    <%
    end if
    %>
    <p align='center'>
    <div class="paginazione">
    <%
    
    page = page
    totPage = pagine_totali
    Max = 9
    
    startPage = page
    EndPage = page + Max
    
    if page > 1 then
    Response.write("<a href=""search.asp?keywords=" & request.form("keywords") &"&page="& page -1 &"""><<</a>")
    end if
    
    if EndPage > totPage then EndPage = totPage
    
    for i = StartPage to EndPage
    If i = totPage then
    Response.Write("")
    Else
    If i = page then
    Response.Write("<b>" & i & "</b>")
    else
    Response.write ("<a href=""search.asp?keywords=" & request.form("keywords") &"&page=" & i & """> " & i & " </a> ")
    end if
    end if
    next
    
    if page < totpage then
    Response.write ("<a href=""search.asp?keywords=" & request.form("keywords") &"&page=" & page +1 & """>>></a> ")
    end if
    %>
    
     
  3. Paolo69

    Paolo69 Moderatore Membro dello Staff MOD

    Registrato:
    18 Febbraio 2010
    Messaggi:
    508
    Mi Piace Ricevuti:
    12
    Punteggio:
    18
    Sesso:
    Maschio
    Occupazione:
    Administrator
    Località:
    Italy
    Home Page:
    Penso che ci voglia un esperto in SQL non in ASP.

    Prova con una query del genere:
    Codice:
    SELECT     *
    FROM         Table1 INNER JOIN
                          Table2 ON Table1.id = Table2.id
    WHERE     (Table1.colonna1 LIKE 'ciao') OR (Table2.colonna23 LIKE 'giampaolo')
    
     
  4. djjunior

    djjunior Utente Attivo

    Registrato:
    24 Luglio 2004
    Messaggi:
    74
    Mi Piace Ricevuti:
    1
    Punteggio:
    8
    Grazie PAOLO69
    per l'aiuto, ma non ho capito che valore richiamare per la stampa a video dei risultati
    Ricordo che la ricerca deve essere fatta su tutte e 2 le tabelle indistintamente.
    E poi i risultati che vorrei visualizzare dovrebbero essere:

    NOME DELLA COLONNA dove è stata trovare la parola cercata (es: colonna1)
    + ID (della stessa colonna) dove è stata trovare la parola cercata (es: 2)

    Perchè come vedi da questo esempio di struttura tabella il testo è nei campi di ogni tabella.
     
Sto caricando...

Condividi questa Pagina