Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Query che conta frequenza nome utenti per mese.

    Ciao a tutti,
    ho necessità di creare due query sulla tabella "referals" del mio db sql così costituita:

    ID / USER / referal / data
    1 / mario / alessio / 2011-10-02 10:26:54
    2 / mario / luigi / 2011-10-05 11:21:14
    3 / alessia / matteo/ 2011-10-07 18:24:12
    4 /
    ecc....

    la tabella contiene quindi l'utente primario, l'utente iscritto tramite il primario, e la data iscrizione.

    Io ho necessità di effettuare due query sulla tabella "referals" del Db che mi consentano di estrarre:
    1. i nomi dei primi 3 utenti (campo "USER") che compaiono con maggior frequenza nel mese corrente (con l'indicazione della quantità di volte che compaiono);
    2. i nomi dei primi 3 utenti (campo "USER") che compaiono con maggior frequenza del mese precedente (con l'indicazione della quantità di volte che compaiono);

    I risultati delle query li vorrei mettere in due tabelle tipo questa (riporto quella del mese corrente per esempio):

    echo "<table border='0'>
    <tr>
    <th>Utente</th>
    <th>Referenti</th>
    </tr>";

    while($row = mysql_fetch_array($result))
    {
    echo "<tr>";
    echo "<td>" . $row['uteora'] . "</td>";
    echo "<td>" . $row['refora'] . "</td>";
    echo "</tr>";
    }
    echo "</table>";

    Io ho provato alcune soluzioni leggendo varie guide online ma questa necessità va oltre le mie capacità. Riesco solo a creare query semplici del tipo "select * from xxx" con le varie funzioni base, ma nulla di più...

    Mi potete aiutare perfavore? Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    268
    devi scrivere un po di codice con le query semplicemente non te la cavi. Per vedere quante occorrenze di un campo ci sono dentro la tabella usi count("nome campo"):

    select user, count(USER) from refaral distinct

    questa query ti restituisce una cosa del tipo:

    ALLESSIO 5
    MATTEO 2
    LUIGI 10
    ANNA 8

    non riesci a filtrare per 3 nomi in basa alla sola occorenza ti serve almeno un altra condizione oppure ciclare nuovamente il resultset con la nuova condizione.

    Saluti

  3. #3
    Ciao Xmac,
    ti ringrazio molto per lo spunto che mi hai dato, questa sera quando torno a casa provo ad inserire il codice. Per capire cosa andrò a fare, nel frattempo, vado a leggermi le informazioni relative alle istruzioni che andrò a compilare.

    Stavo pensando una cosa però: non posso inserire un "ORDER BY xyz DESC" per fare ordinare i risultati dal più alto al più basso ed infine inserire un LIMIT 3 per limitare il risultato ai primi 3 risultati?

    xyz in questo caso corrisponderebbe al risultato del "count"; premetto che non ne so molto, ma se riuscissi a dare una definizione al risultato della query count allora potrei mettere in ordine by discendente e fare il limit.

    E' possibile?

    Grazie per la pazienza e per l'aiuto.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    268
    teoricamente si, però possono esserci casi in cui la query non ti funziona.
    ad esempio:

    Luigi 10
    Anna 8
    Marco 5
    Giorgio 4
    Francesco 5

    chi escludi in questo caso Francesco o Marco?

  5. #5
    Effettivamente sarebbe un bel problema. Teoricamente io vorrei visualizzarli ambedue. Non c'è una funzione che mi permetta di mostrare i primi 3 valori più alti'? indipendentemente dalla loro quantità. Grazie mille.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    268
    se vuoi utilizzare ambedue i record allora non puoi fermarti alla scelta dei primi 3 record.
    devi gestire le cose da codice.
    scusa ma te che usi per gestire le query (php, java, .net...)?

  7. #7
    Uso di base il php, ma posso compilare anche dei piccoli e semplici script in java; in tutti i linguaggi non sono proprio una cima, anzi. Me la cavicchio, da autodidatta, con delle funzionalità molto basilari; non ho le conoscenze approfondite per andare oltre e mi sembra di capire che la mia necessità in questo caso richieda conoscenze un po più avanzate che magari riuscirò a maturarepiù avanti con il tempo (è il mio secondo hobby oltre l'acquariologia marina).

    A questo punto per semplificare posso proporre il primo risultato (ORDER BY xyz DESC LIMIT 1) nella pagina principale e inserire un simbolo che rimandi ad una pagina secondaria per vedere la lista completa (ORDER BY xyx DESC) - senza limit - specificando agli utenti la validità dei soli primi 3 punteggi più alti.

    Nella pagina secondaria inserirò la query proposta:
    select user, count(USER) from refaral distinct

    Ma nella principale come posso fare per mostrare solo il primo punteggio più alto?

    Grazie mille ancora.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    268
    usa la funzione max(count(nome_campo))
    fai delle prove ma la strada è questa

  9. #9
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333

    Re: Query che conta frequenza nome utenti per mese.

    Originariamente inviato da Theos
    ho necessità di creare due query sulla tabella "referals" del mio db sql così costituita:

    Ma che DB usi ???

  10. #10
    Ciao nman, utilizzo un DB Mysql versione 5.0.84.

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.