Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Query su termini non consecutivi

    Salve,

    ho quache problemino a rendere un po' + intelligente una query.
    Questa query interroga il DB all'interno del campo Descrizione,
    questo campo contiene strighe del tipo:

    "2-201 FPM O-RING 75 Sh I.D. 4,34 X CSD 3,53"

    Con la stringa attuale:
    codice:
    "SELECT * FROM  Invent WHERE Descrizione LIKE '%"&txtpro&"%'"
    cercando una qualsiasi parola contenuta nella descrizione
    riesco a reperire correttamente il record, questo avviene anche
    cercando per piu' parole consecutive (es. I.D. 4,34 x CSD 3,53)

    Ma nel caso in cui inserisco nel mio form di ricerca piu' termini
    non consecutivi (es. 4,34 x 3,53) ecco che il record non viene piu' trovato.

    Come dovrei formattare la query affinche' cerchi per termini consecutivi e non?

    Grazie anticipatamente,
    byeZ

  2. #2
    Utente di HTML.it L'avatar di diegoctn
    Registrato dal
    May 2001
    Messaggi
    2,118
    Non ho capito.

  3. #3
    Pensavo di essere stato chiaro con gli esempi,
    vedo di farne altri per spiegarmi meglio:

    ho un form di ricerca per parola/e chiave/i,
    qualsiasi termine inserito in questo form viene ricercato
    all'interno del database nel campo descrizione.

    Questa e' la mia query:

    codice:
    "SELECT * FROM  Invent WHERE Descrizione LIKE '%"&txtpro&"%'"
    Supponniamo di avere un record contenente la seguente
    descrizione:

    "Telaio in legno massello altezza 4,34 x larghezza 3,53 "

    in questo momento se cerco il termine "massello", il record che ho usato come esempio sara' visualizzato tra i disultati, stesso discorso valse se avessi cercato "legno massello".

    Ma nel caso io cercassi termini non consecutivi come ad esempio:

    "4,34 x 3,53 "

    la query non mi produrra' nessun risultato seppur queste parole
    sono contenuti nel record sopracitato.

    Mi chiedo come devo formattare la query in modo da
    trovare i termini cercati all'interno della descrizione sia
    che essi siano consecutivi che no?

    Spero di essermi spiegato meglio adesso,
    Grazie ancora,
    byeZ

  4. #4

  5. #5
    Utente di HTML.it L'avatar di Sypher
    Registrato dal
    Jun 2003
    Messaggi
    1,994
    se fai una split per spazio e poi una serie di like per ogni termine restituito in AND...non so se funziona però!
    La passera non dura perchè Sypher la cattura!

    "No one like us we don't care, we are millwall, super millwall, we are millwall from the DEN"

  6. #6
    Intanto Grazie per la risposta,

    effettivamente avevo cominciato a buttare giu' un po' di codice
    che segue la tua stessa filosofia:

    1. memorizzo in una variabile la stringa da cercare
    2. la spezzo in tante parti quante sono le parole separate dallo spazio
    3. memorizzo gli "N" pezzi in "N" variabili (ad esempio: var1=pezzo1, var2=pezzo2 ecc...)

    4. cerco con la mia stringa "...Where Descrizione like pezzo1 and like pezzo3 and like pezzo3..."

    la fase 1 e 2 le ho gia' affrontate, il problema rimane la 3 in quanto spezzo la frase grazie ad un ciclo ma non riesco a memorizzare i vari pezzi ottenuti mano mano in diverse variabili, di conseguenza la variabile viene RIscritta con nuovo valore (pezzo successivo)
    Il codice usato è preso nella sezione script con qualche modifica:

    codice:
    <%
    function separa(testo,carattere)
    dim separati
    separati = split(testo, carattere)
    response.write "Frase originale -> "&testo
    response.write "
    Carattere separatore -> "&carattere
    response.write "
    Parti di frase ->"
    response.write "<ul>"
    for i=0 to ubound(separati)
    response.write "[*]"&separati(i)
    var=separati(i)  'memorizzo il pezzo nella variabile
    next
    response.write "[/list]"
    end function
    
    dim strTesto
    strTesto = txtpro
    dim chrCarattere
    chrCarattere = " "   'carattere separatore spazio
    call separa(strTesto,chrCarattere)
    %>
    Caspita rendere questa query intelligente mi sta stordendo!
    Riesci a tirare un ragno dal buco?!
    byeZ

  7. #7
    Una possibilità è
    codice:
    sql = "SELECT * FROM tabella WHERE (("
    
    separati = Split(testo, " ")
    x = 0
    for each word In separati
    word = trim(word)
    
    sql = sql & " campo1 like '%" & word & "%')"
        	  
     
    If Not x = UBound(separati) Then sql = sql & " or ("
    
    x = x + 1
      
    Next
    
    sql = sql &")"
    E' nato www.lombardiamotori.it

    www.universocase.it: il primo portale italiano di annunci immobiliari gratuiti e autogestiti!

  8. #8
    Grazie a tutti per i suggerimenti ma ho risolto da poco
    con questa semplice query, consigliatami da una collega:

    codice:
    "SELECT * FROM  Invent WHERE Descrizione LIKE '%"&txtpro&"%'  OR Descrizione LIKE '%"&replace(txtpro," ","%")&"%'"
    Era molto + semplice del previsto e funziona per termini singoli,
    per piu' termini consecutivi e finalmente anche per termini
    non consecutivi!

    Grazie a tutti,
    Terry sei grande!
    byez

  9. #9
    Testato: funziona, semplice ed elegante!

    Se posso cercare il pelo nell'uovo, penso sia una soluzione che va bene abbinata all'operatore "LIKE" (quindi per cercare anche eventuali sottostringhe e non solo le parole esatte) ma non all'operatore "="

    In questo secondo caso, non vedo alternative a splittare l'input e creare e concatenare un segmento di query per ogni elemento dell'array così formato.

    Complimenti comunque per l'hack!

    E' nato www.lombardiamotori.it

    www.universocase.it: il primo portale italiano di annunci immobiliari gratuiti e autogestiti!

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.