• User Attivo

    un group by che non va

    salve a tutti, ho questa tabella:

    
       Link                                                                visite
      Miosito.asp?uId=Gianni&pag=                        10
      Miosito.asp?uId=Nick&pag=contatti   2
      Miosito.asp?uId=Gianni&pag=contatti 1
      Miosito.asp?uId=Franco&pag=contatti           5
      Miosito.asp?uId=beppe                                  12
      Miosito.asp?uId=gianni&pag=descrizione        3
      Miosito.asp?uId=francy&pag=contatti 34
      Miosito.asp?uId=Gianni                                   21
      Miosito.asp?uId=Gianni&pag=contatti 1
      
    
    

    dovrei creare una stampa che mi faccia uscire il nome utente con il totale delle visite.
    Ho provato ad impostare la query sql in questo modo:

    
    sql = "Select SUM(visite) as totvis, link from tabUtenti where link LIKE '%uId%' GROUP BY link"
    
    

    Ok, funziona, ma sorge un problema, mi raggruppa i link esatti! es per gianni, fa questo raggruppamento:

    
    Miosito.asp?uId=Gianni&pag=                        10
        Miosito.asp?uId=Gianni&pag=contatti 2
    Miosito.asp?uId=gianni&pag=descrizione        3
        Miosito.asp?uId=Gianni                                   21
      [code]
    
    invece il raggruppamento dovrebbe venire in questo modo:
    [code]
    Miosito.asp?uId=Gianni&pag=                        36
    
    

    purtroppo per quanto i links abbiano in comune la stringa uId=Gianni, non sono tutti gli stessi e per tale non li raggruppa.
    Quello che mi chiedo io, si potrebbe fare un confronto generico, del tipo: "Raggruppa dove link sia uguale a %uId=Nome%
    forse chiedo troppo:(
    ps uso db access

    grazie, ciao


  • Super User

    Ciao, in questo caso non puoi usare il group by ma devi usare la where, prendi i dati e poi da codice fai la somma delle varie righe.


  • User Attivo

    Grazie per la risposta Cali, aspettavo proprio una tua risposta, visto che sei bravo a trovare soluzioni geniali:figo2:

    Cmq, non ho capito bene cosa mi hai spiegato, se potresti spiegarmi il procedimento passo-passo, te ne sarei grato.

    Io ho usato la where nella query:
    ...where link LIKE '%uId%'...
    questo per pulire il db da altri links che non centrano con gli utenti, ma poi dovrei procedere a fare la somma numerica per ogni utente.

    :ciauz:


  • Super User

    Per ogni utente, fai la select senza group by e senza sum (ma con la where per prendere solo un user id). Quello restituirà un elenco del tipo:

    Miosito.asp?uId=Gianni&pag= 10
    Miosito.asp?uId=Gianni&pag=contatti 2
    Miosito.asp?uId=gianni&pag=descrizione 3
    Miosito.asp?uId=Gianni 21

    Per ogni riga, prendi il numero e lo sommi in una variabile, e quella è al somma che cercavi.


  • User Attivo

    Ma la select utente per utente, come potrei farla???
    io avevo pensato una cosa del genere:

    
    "Select link from tabUtenti where link LIKE '%uId%'" //pulisco il db
    arrUid = split(recordset("link"),"uId") // divido il link in 2 risultato: arrUid(0) = Miosito.asp? arrUid(1)= =Gianni&pag= 10
    
    nUt = arrUid(1) // mi ricavo il n utente buttando la prima parte della stringa, risultato: Gianni&pag= 10 
    flg = split(arrUid(1),"&") //divido la stringa ricavata prima cosi prendo il nome utente pulito risultato: flg(0)=Gianni flg(1)1=pag= 10
    flg1 = flg(0) // 
    
    do while not recordset.eof
    "select visite, link from tabUtenti where link LIKE '"&flg1&"%' //seleziona tutti i links che contengono nome utente, la fine lasciala stare
    
    if instr(recordset("links"),flg1)<>0 then //  se il prossimo recordset contiene lo stesso n utente procedi con la somma
    
    // ----------   fai la somma, ma non so come dovrei fare
    end if
    
    recordset.movenext
    loop
    
    
    

    come puoi notare, il codice è molto confuso, e complicato, si potrebbe migliorare, il punto però è:
    ho quasi 400 utenti, caricare la pagina potrebbe risultarmi macchinoso, non penso che il mio script potrebbe andare, tu avevi pensato qualcosa del genere, o magari hai qualcosa di più efficente e più semplice???

    Grazie, ciao.