Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    68

    Dividere stringa di ricerca

    Cercato e trovato nienye

    Allora io ho questa semplice query di un motore di ricerca che cerca in due campi di una tabella (f_keyword è il contenuto del form):
    .
    .
    .
    sql = "SELECT * FROM news WHERE (article LIKE '%"&f_keyword&"%') OR (title LIKE '%"&f_keyword&"%') Order By id DESC"
    .
    .
    .
    Questa ovviamente non funziona se scrivo due parole che non sono consecutive nel DB ... allora mi sono cercato qualche funzionina che dovrebbe risolvere il problema ed ho visto che una delle più diffuse è questa:
    codice:
    var keywords = testo.split(" ");
    var sql = "SELECT * FROM pagineweb WHERE";
    for (i=0;i<keywords.length;i++) {
       if (i>0) sql += " AND";
       sql += "keywords LIKE '%" + keywords[i] + "%'";
    }
    Ma non riesco a modificarla in modo da farla cercare in due tabelle, come faccio ? avete magari altre soluzoni ?

  2. #2
    Vorrai dire in due colonne?
    Nel tuo esempio hai le colonne "article" e "title"
    e devi cercare in queste due.

    Quindi la tu funzioncina dovrebbe essere così :

    var keywords = testo.split(" ");
    var sql = "SELECT * FROM news WHERE";

    '//Per la colonna Article
    for (i=0;i<keywords.length;i++) {
    if (i>0) sql += " AND";
    sql += "Article LIKE '%" + keywords[i] + "%'";
    }

    '//Per la colonna Title
    for (i=0;i<keywords.length;i++) {
    if (i = 0) sql += "("
    if (i>0) sql += " AND";
    sql += "Title LIKE '%" + keywords[i] + "%'";
    }

  3. #3
    Scusa, mi scapano i tasti ... il codice corretto è questo secondo me


    codice:
    var keywords = testo.split(" "); 
    var sql = "SELECT * FROM news WHERE"; 
    
    '//Per la colonna Article 
    for (i=0;i<keywords.length;i++) { 
    if (i>0) sql += " AND"; 
    sql += "Article LIKE '%" + keywords[i] + "%'"; 
    } 
    
    '//Per la colonna Title 
    for (i=0;i<keywords.length;i++) { 
    if (i>0) sql += " AND"; 
    sql += "Title LIKE '%" + keywords[i] + "%'"; 
    }

  4. #4
    Utente bannato
    Registrato dal
    Dec 2003
    Messaggi
    381
    testo=split(keywords," ")
    primo_campo=testo(0)
    secondo_campo=testo(1)
    sql = "SELECT * FROM news WHERE (article LIKE '%"&primo_campo&"%') OR (title LIKE '%"&secondo_campo&"%') Order By id DESC"

    prova cosi'!!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    68
    Originariamente inviato da deivnet
    Scusa, mi scapano i tasti ... il codice corretto è questo secondo me


    codice:
    var keywords = testo.split(" "); 
    var sql = "SELECT * FROM news WHERE"; 
    
    '//Per la colonna Article 
    for (i=0;i<keywords.length;i++) { 
    if (i>0) sql += " AND"; 
    sql += "Article LIKE '%" + keywords[i] + "%'"; 
    } 
    
    '//Per la colonna Title 
    for (i=0;i<keywords.length;i++) { 
    if (i>0) sql += " AND"; 
    sql += "Title LIKE '%" + keywords[i] + "%'"; 
    }
    Scusa il tutto si può convertire in formato non JScript infatti mi dà subito errore al primo ; che trova ... dovrei aggiungere <%@ LANGUAGE = JScript %> e adattare tutto il resto della pagina.

    X anise373

    Che senso ha la tua ricerca ? se per esempio uno scrive "Fiat Punto" che senso ha cercare la parola Fiat in Article e Punto in title ? e se uno scrive più di due parole ?

  6. #6
    Originariamente inviato da maxsona
    Scusa il tutto si può convertire in formato non JScript infatti mi dà subito errore al primo ; che trova ... dovrei aggiungere <%@ LANGUAGE = JScript %> e adattare tutto il resto della pagina.
    Pensavo usassi JScript per quello l'ho lasciata inalterata.
    In VBScript :

    codice:
    keywords = split(testo, " "); 
    sql = "SELECT * FROM news WHERE"; 
    
    '//Per la colonna Article 
    for i = 0 to len(keywords)
      if (i>0) then sql = sql & " AND"
      sql = sql & "Article LIKE '%" & keywords(i) & "%'" 
    next
    
    '//Per la colonna Title 
    for i = 0 to len(keywords)
      if (i>0) then sql = sql & " AND"
      sql = sql & "title LIKE '%" & keywords(i) & "%'" 
    next

  7. #7
    Utente bannato
    Registrato dal
    Dec 2003
    Messaggi
    381
    keywords =split(testo," ")
    sql_ins=""

    '//Per la colonna Article
    for i=0 to ubound(keywords)
    sql_ins= sql_ins & " AND Article LIKE '%" & keywords(i) & "%'";
    next

    '//Per la colonna Title
    for i=0 to ubound(keywords)
    sql_ins= sql_ins & " AND Title LIKE '%" & keywords(i) & "%'";
    next
    sql = "SELECT * FROM news WHERE 1=1 "& sql_ins


    SCUSA se prima non avevo capito
    che senso ha se uno ti da dei suggerimenti e tu invece di pensare vuoi che ti venga fatto il lavoro??????????????

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    68
    Originariamente inviato da anise373
    SCUSA se prima non avevo capito
    che senso ha se uno ti da dei suggerimenti e tu invece di pensare vuoi che ti venga fatto il lavoro??????????????
    Grazie il tuo funziona ! scusa se ti ho offesso ! come potrei adesso fare una variabile che contiene il numero di riscontri trovati ? prima fecevo così...
    codice:
    sql = "SELECT Count(*) FROM news WHERE (article LIKE '%"&f_keyword&"%') OR (title LIKE '%"&f_keyword&"%')"
    Set count=conn.Execute(SQL)
    Adesso ovviamente non funziona più

  9. #9
    Utente bannato
    Registrato dal
    Dec 2003
    Messaggi
    381
    io di solito con le query apro un recordSet che contiene tutti i risultati:

    Set rs = Server.CreateObject("ADODB.Recordset")

    keywords =split(testo," ")
    sql_ins=""

    '//Per la colonna Article
    for i=0 to ubound(keywords)
    sql_ins= sql_ins & " AND Article LIKE '%" & keywords(i) & "%'"
    next

    '//Per la colonna Title
    for i=0 to ubound(keywords)
    sql_ins= sql_ins & " AND Title LIKE '%" & keywords(i) & "%'"
    next

    sql = "SELECT count(*) as Tot FROM news WHERE 1=1 "& sql_ins
    rs.open connessione,sql
    conteggio=rs("tot") 'conteggio è la variabile che contiene il n° dei record trovati
    rs.close

    oppure
    rs.open connessione,sql,1,3
    conteggio=rs.recordCount


    prova!

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    68
    Nello scriptino ho fatto in modo che la pagina che mostra il contenuto della mia tabella news sia anche quella che mostra il risultato delle ricerche in questa tabella ... ecco lo scriptino che magari può tornare utile
    codice:
    <%
    action = TRIM(Request.QueryString("action"))
    if action = "search" then
    f_keyword = Request.Form("keyword")
    keywords =split(f_keyword," ") 
    sql_ins="" 
    for i=0 to ubound(keywords) 
    sql_ins= sql_ins & " AND Article LIKE '%" & keywords(i) & "%'"
    next 
    for i=0 to ubound(keywords) 
    sql_ins= sql_ins & " AND Title LIKE '%" & keywords(i) & "%'"
    next 
    sql = "SELECT * FROM news WHERE 1=1 "& sql_ins 
    else
    sql = "SELECT * FROM news Order By id DESC" 
    end if
    Set rs=Server.CreateObject("ADODB.Recordset")
    rs.Open sql, conn, 3, 3
    count=rs.recordCount 
    rs.PageSize = 3
    If (not rs.BOF) and (not rs.EOF) then
    rs.AbsolutePage = pag
    For i=1 to rs.PageSize
    %>
    .
    .
    .
    Qui c'è la parte HTML
    .
    .
    .
    <% 
    rs.MoveNext
    If rs.EOF Then Exit For
    Next
    end if
    %>
    Quindi se richiamiamo pagina.asp vediamo il contenuto della tabella news, se richiamiamo pagina.asp?action=search e gli passiamo la parola chiave mi fà vedere la ricerca nella tabella news.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.