Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: Ricerca da una stringa

  1. #1
    Utente di HTML.it L'avatar di satoshi
    Registrato dal
    May 2002
    Messaggi
    217

    Ricerca da una stringa

    dovrei realizzare una ricerca impostata in questo modo:
    ho un data base strutturato cosi

    id_artista
    nome_artista
    biografia_artista

    adesso ho una stringa che contiene diversi nomi di artisti separati dalla virgola in questo modo:

    lucio battisti, eros ramazzotti, adriano celentano

    quello che vorrei fare io è che da questa stinga voglio ricercare nel database artisti controllando prima di tutto se c'e' il nome dell'artista e se ne caso c'e' mostrare la biografia

    in questo modo


    lucio battisti
    biografia contenuta del database artisti ..........

    eros ramazzotti
    biografia contenuta del database artisti ..........

    adriano celentano
    biografia contenuta del database artisti ..........

  2. #2
    Utente di HTML.it L'avatar di fraude
    Registrato dal
    Feb 2004
    Messaggi
    2,870
    Cerca sul forum per "motore di ricerca"

  3. #3
    Utente di HTML.it L'avatar di satoshi
    Registrato dal
    May 2002
    Messaggi
    217
    sono tornato sul mio problema


    cerco di spiegare meglio quello che voglio ottenere con questa ricerca particolare



    partendo da una stringa che contiene dei nomi che sono separati da una virgola devo controllare attraverso un ciclo se questo nome è presente nel database e se c'e' devo estrare il suo id


    in modo da ottenere una lista di ID al posto dei nomi


    esempio


    struttura database

    id_artista
    nome_artista

    record 1 laura pausini
    record 2 zucchero
    record 3 tiziano ferro
    record 4 lucio battisti
    record 5 vasco rossi
    record 6 adriano celentano
    record 7 eros ramazzotti
    .....

    stringa

    lucio battisti, eros ramazzotti, adriano celentano


    con la ricerca devo ottenere gli ID di ogni artisti in questo modo

    4, 7, 6

  4. #4
    Usa il replace:

    dim stringaNomi
    dim stringaWhere
    dim stringaSelect
    dim stringaQuery

    stringaNomi="lucio battisti, eros ramazzotti, adriano celentano"
    stringaNomi=replace(stringaNomi,", ",",") 'togli gli spazi eventuali dopo le virgole se ci sono
    stringaNomi=replace(stringaNomi," ,",",") 'togli gli spazi eventuali prima delle virgole se ci sono
    stringaNomi=replace(stringaNomi,"'","''") 'sistemi il problema degli eventuali apostrofi nei nomi
    stringaNomi=trim(stringaNomi & "")'togli gli spazi eventuali prima e dopo la stringa

    'a questo punto trasformi le virgole in qualcosa del genere
    stringaWhere=" nome_artista like '" & replace(stringaNomi,",","%' or nome_artista like '")

    'e per l'ultimo nome
    stringaWhere=stringaWhere & "%'"

    'alla fine ti dovresti trovare
    'stringaWhere=" nome_artista like 'lucio battisti%' or nome_artista like 'eros ramazzotti%' or nome_artista like 'adriano celentano%'"

    'a questo punto ti crei la stringa iniziale
    stringaSelect="select id_artista from [nome tabella] where "

    'e quindi concludi con
    stringaQuery= stringaSelect & stringaWhere

    'a questo punto ti lanci la query e avrai (spero) un recordset con tutti gli id_artista. Con quello poi ci fai ciò che vuoi...te lo scorri e te lo salvi in un array, ci ricostruisci una stringa di id_artista divisi da virgola e segui lo stesso procedimento utilizzato sopra per costruire un'altra query dinamica o ti costruisci una seconda query dinamica sulla tabella delle biografie utilizzando un ciclo sul recorset prodotto dalla prima query.

    P.S. So che non è un metodo troppo ortodosso, ma forse funziona...i puristi della programmazione mi perdonino
    inoltre occhio che potresti trovare anche chi mette 2/3 spazi dopo o prima della virgola ecc... gioca un po' con i replace.

    Ciao.
    Senatus PopulusQue Romanus

  5. #5
    Utente di HTML.it L'avatar di satoshi
    Registrato dal
    May 2002
    Messaggi
    217
    grazie per il tuo consiglio


    io intando avevo iniziato pensando di fare in questo modo
    secondo voi qual è la soluzione migliore?


    *******



    Premetto che la stringa è variabile puo' contenere da un minimo di 1 nome fino ad arrivare a 40/45 nomi


    io avevo pensato di fare in questo modo:


    1) splitto la stringa e mi trovo il totale delle virgole
    2) poi creo un array contenente ogni nome & cognome che si trova tra una virgola e l'altra in modo da ottonere la lista degli artisti
    3) a questo punto faccio fare un ciclo di tot virgole inserendo ad ogni ciclo la variabile del nome
    4) ad ogni ciclo se il nome risulta nel database lo salvo in una variabile di sessione


    ho provato a creare parte del codice che riposto qui sotto


    <%
    stringa = "lucio battisti, eros ramazzotti, adriano celentano"


    mArray = Split(stringa, ",")


    For i = 0 to UBound(mArray)

    searchw = mArray(i)

    Set Rs = Server.CreateObject("ADODB.Recordset")
    comm.CommandText = "SELECT * FROM artisti WHERE attivo = 1 and nome like '%" & searchw & "%'"
    Rs.Open comm,,3,3
    if Rs.EOF then
    else

    ary1w = Split(searchw, " ")

    comm.CommandText = "select * from artisti where"
    For i = 0 To UBound(ary1m)
    comm.CommandText = comm.CommandText & tempJoinWord & "(" & _
    "nome LIKE '%" & ary1m(i) & "%')"
    tempJoinWord = " OR "
    Next

    Session("lista_id") = ""


    While Not Rs.EOF

    str_id = Rs("id")
    HTML101 = HTML101 & ""& str_id &", "


    Rs.MoveNext
    Wend


    end if


    Next


    Rs.close
    set Rs = nothing



    Session("lista_id") = HTML101
    response.write HTML101

    %>




    mi da questo errore



    Microsoft VBScript compilation error '800a0410'

    Invalid 'for' loop control variable


    For i = 0 To UBound(ary1m)
    ------^

  6. #6
    Utente di HTML.it L'avatar di satoshi
    Registrato dal
    May 2002
    Messaggi
    217
    chi mi puo' dare un aiutino?

  7. #7
    Hai due cicli FOR dove usi la variabile i per loopare la collection.
    Cambia lettera almeno per il secondo.

  8. #8
    Utente di HTML.it L'avatar di satoshi
    Registrato dal
    May 2002
    Messaggi
    217
    grazie per l'aiuto ho fatto dei passi avanti ma ho ancora un problemino

    praticamente con il codice riportato qui sotto riesco a visualizzare solamente l'id del primo nome e non i successivi..... come se non fa il ciclo

    dove sbaglio?

    ecco il codice che ho utilizzato




    stringa = "lucio battisti, eros ramazzotti, adriano celentano"
    mArray = Split(stringa, ",")




    For i = 0 to UBound(mArray)
    searchw = mArray(i)

    Set Rs = Server.CreateObject("ADODB.Recordset")
    comm.CommandText = "SELECT * FROM artisti WHERE attivo = 1 and nome like '%" & searchw & "%'"
    Rs.Open comm,,3,3
    if Rs.EOF then
    else

    ary1w= Split(searchw, " ")

    comm.CommandText = "select * from artisti where"

    For j = 0 To UBound(ary1w)
    comm.CommandText = comm.CommandText & tempJoinWord & "(" & _
    "nome LIKE '%" & ary1m(j) & "%')"
    tempJoinWord = " OR "
    Next

    Session("lista_artisti") = ""


    While Not Rs.EOF

    id_aristista = cint(Rs("id"))
    HTML101 = HTML101 & ""&id_aristista&", "


    Rs.MoveNext
    Wend


    end if

    Rs.close
    set Rs = nothing


    Next


    Session("lista_artisti") = HTML101
    response.write HTML101

  9. #9
    codice:
    <%
    stringa = "pinco pallo, ciccio pasticcio, amedeo minghi"
    stringa = trim(stringa)
    if inStr(stringa,", ") then stringa = replace(stringa,", ",",")
    
    voci = split(stringa,",")
    
    set conn = server.createObject("ADODB.Commection")
    conn.open connectionString
    
    for i = 0 to uBound(voci)
    sql = "SELECT * FROM artisti WHERE attivo = 1 AND nome LIKE '%" & voci(i) & "%'"
    set rs = conn.execute(sql)
    if not rs.eof then
    listaIdArtisti = listaIdArtisti & rs("id") & ","
    end if
    rs.close
    set rs = nothing
    next
    
    conn.close
    set conn = nothing
    
    session("lista_artisti") = listaIdArtisti
    response.write listaIdArtisti
    %>

  10. #10
    Utente di HTML.it L'avatar di satoshi
    Registrato dal
    May 2002
    Messaggi
    217
    grazie mems funziona



    ultima cosina

    quando visualizzo la stringa degli id ho la virgola finale. come la posso levare?

    53, 304, 263, 72, 54,

    se nel caso nella stinga iniziale ho qualche annotazione che sarà presente nelle parentesi in questo modo

    stringa = "pinco pallo (roma), ciccio pasticcio, amedeo minghi (genova)"

    come posso trasformare la stringa prima di fare il ciclo (praticamente levare le parentesi e tutto il contenuto che c'e' dentro) in modo da ottenere questo...


    stringa = "pinco pallo, ciccio pasticcio, amedeo minghi"

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.