mysql, selezione dati ricorrenti più volte

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Buongiorno a tutti.
Ho una tabella (utentiscuola) che contiene i dati di coloro che si sono iscritti ai nostri corsi e i codici delle lezioni a cui hanno partecipato.
Per valutare la fidelizzazione, sto selezionando gli utenti che hanno partecipato a più di una lezione.
Ottengo il risultato con questa query:
PHP:
$query = ("SELECT email,nome,cognome, count(email) FROM utentiscuola GROUP BY email,cognome HAVING count(email) > 1 ORDER BY count(email) DESC");
In questo modo riesco a visualizzare un elenco con nome, cognome, email e numero di presenze (count(email)).
Mi piacerebbe aggiungere anche i codici di tutte le lezioni a cui ha partecipato l'utente.
Il dato è contenuto nel campo id_lezione per ogni riga (e ogni riga corrisponde a una mail).
Non riesco a capire se si può ottenere quello che mi serve.
Immagino che, aggiungendo come campo di select id_lezione:
Codice:
...SELECT email,nome,cognome,id_lezione.....
i codici siano lì, ma non ho idea di come visualizzarli in una forma del tipo:
nome cognome - email - numero ricorrenza - Questo utente ha partecipato alle lezioni 621, 453, 715...
Secondo voi è possibile?
Grazie in anticipo per i suggerimenti
 
ciao
secondo me devi usare del codice non ti basta la query che hai postato, ma probabilmente devi fare aun'altra query, un'idea l'avrei (non so se funziona), ma prima di proseguire devi risolvermi un dubbio:
tu hai messo ...GROUP BY email,cognome... cioe oltre che per email hai raggruppato anche per cognome, ora ad es (tralascindo il resto) se hai tra gli altri due record tipo
[email protected] Mario Rossi
[email protected] Giuseppe Rossi

avendo raggruppato anche per cognome come fai a distinguere Mario da Giuseppe?
hai fatto una prova del genere?
 
in effetti no, ma credo che avendo due mail diverse dovrei trovare un primo Rossi con mail [email protected] e una seconda riga con Rossi e l'altra mail. O no? provo e poi ti dico.
 
Ciao,
ho provato. Inaspettatamente funziona alla perfezione... prima raggruppa per email, poi per cognome. Quindi con email diverse e cognomi uguali ottengo esattamente le due righe come previsto. Anche il numero delle occorrenze è correttamente attribuito ai due indirizzi mail.
Ora resta da vedere come estrarre i codici delle lezioni per ogni utente...
 
ciao
PHP:
<?php
/*da quello che capisco i record sono così (giusto?)
id email nome cognome corso
....
21 [email protected] Mario Rossi cucito
22 [email protected] Giuseppe Rossi cucito
23 [email protected] Mario Rossi cucina
24 [email protected] Mario Rossi giardinaggio
25 [email protected] Giuseppe Rossi nuoto
26 [email protected] Sebastanino Verdi cucna
....
*/
// connessione
//per comodità metterei un alias
$query = "SELECT email,nome,cognome, count(email) as ftot FROM utentiscuola GROUP BY email,cognome HAVING count(email) > 1 ORDER BY count(email) DESC";
$ris=mysqli_query($conn, $query);
if(mysqli_num_rows($ris)>0){
    while($riga=mysqli_fetch_assoc()){
        $email=$riga['email'];
        $nome=$riga['nome'];
        $cognome=$riga['cognome'];
        $numero=$riga['ftot'];
        $q_corsi="SELECT corso FROM utentiscuola WHERE email='$email'";
        //nota se es Mario Rossi ha frequentato per due volte il corso di cucina prova ad aggiungere anche GROUP BY corso
        //alla $q_corsi
        $ris_corsi=mysqli_query($conn, $ris_corsi);
        $frequentati=array();
        while($corso=mysqli_fetch_assoc($ris_corsi)){
            $frequentati[]=$corso['corso'];
        }
        $corsi_frequentati=implode(",", $frequentati);
        echo "l'utente $nome $cognome $email ha frequentato n. $numero corsi ($corsi_frequentati)<br />";
    }
}else{
    echo "non ci sono allievi<br />";
}
//......
?>
intanto prova questo, ho un'altra mezza idea (forse migliore) ma devo metterla a punto e vedere se funziona come ragionamento
 
scusa il ritardo nella risposta.
ho dovuto occuparmi di un'altra cosa urgente...
Comunque così funziona bene, visualizzo correttamente i codici delle lezioni frequentate da ciascuno.
Ti ringrazio, non avevo proprio pensato a un while all'interno del primo while...
Perfetto, per ora... alla prossima e grazie!
 

Discussioni simili