Creare una classifica con una tabella strutturata in modo diverso

Ciao ragazzi, volevo creare una classifica in php e mysql, e sarebbe davvero facile se la tabella fosse strutturata in un modo diverso dagli altri.

Se la tablla avesse dei valori numerici, basterebbe dirgli di prendere 5 valori in ordine descrescente fra i più alti. Il problema è che la tabella è strutturata in questo modo:

______________________________________________

ID | UTENTE | IP DELL'UTENTE INVITATO | DATA
______________________________________________

1   |  Davide | 66.240.132.1 | 1345541292
------------------------------------------------------------------
2   | Jhon      | 151.52.213.20 | 1347541692
------------------------------------------------------------------
3   |  Davide  | 66.240.132.1  | 1445541292

_______________________________________________

C'è un codice php che è in grado di prendere tutti i nomi dal campo (UTENTE), contare quante volte si ripete ognuno di questo nome (in questo caso vedrebbe che Davide compare due volte) e scrivere in ordine decrescente (dal più alto al più basso) il nome e sotto quante volte si ripete?

Per farvi capire, questo codice, basandosi sui dati sopra, eseguirebbe una cosa del genere:

1. Davide:
     2 volte
2. Jhon
     1 volta

e far sì che il limite da visualizzare sia di 5?

Se riuscireste ad aiutarmi, non saprei come esservene grato!

inviato 4 anni fa
Clear
Clear
21
X 0 X

Questa cosa che chiedi la si può fare utilizzando il linguaggio SQL:

SELECT COUNT(*), utente FROM `tabella` GROUP BY utente

Puoi poi processare il risultato con il php in modo da avere l'output come hai richiesto.

risposto 4 anni fa
Mario Santagiuliana
Ok grazie mille, però ho ancora alcuni dubbi. Per esempio, come mai dici di contare * ossia tutti i valori e non solo utente? Poi, cosa devo usare per il ciclo while? fetch_arrow, fetch_assoc etc. o cosa?Clear 4 anni fa
Attento che nella query c'è la selezione GROUP BY.Mario Santagiuliana 4 anni fa
X 0 X

Allora, il tuo aiuto è stato utilissimo. Ma ho diversi problemi.

Dunque, io sto facendo questa classifica per un CMS. Questo CMS ha la tabella users e la tabella users_referidos. La tabella users è la tabella di tutti gli utenti, la tabella users_referidos invece la tabella descritta sopra.

Io ho bisogno che in questa classifica mi stampi i nomi degli utenti, controlli quanti referenti ha e li mette.

Dunque ho scritto questo codice

<?php
$userstats_a = mysql_query("SELECT * FROM users");
while($userstats = mysql_fetch_assoc($userstats_a)){
$row = mysql_fetch_assoc($row = mysql_query("SELECT COUNT(usuario) AS numerofreferidos FROM users_referidos WHERE usuario = '".$userstats['username']."'"));
?>

<tr><td width="5px"> </td>
<td width="20px"><img src="http://www.habbo.it/habbo-imaging/avatarimage?figure=<?php echo $avatar; echo $userstats['look']; ?>&size=s&direction=2&head_direction=2&gesture=sml&size=m" align="left"></td>
<td width="195px"><a href="../home/<?php echo $userstats['username']; ?>"><b><?php echo $userstats['username']; ?></b></a><br />
<span style="text-shadow: 0px 0px 7px purple"><span style="color: purple" size:="" 2=""><?php echo $row['numerofreferidos']; ?> Referenti</span></td>
</tr><?php } ?>

Solo che con questo codice, stampa TUTTI gli utenti, controlla quanti referenti ha e li scrive sotto. Io ne voglio solo 5, allora ho pensato di mettere LIMIT 5 a ("SELECT * FROM users"); solo che con limit 5 mette i PRIMI 5 degli utenti, quindi nei 5 risultati ci sono persone che hanno anche 0 referenti. 

io volevo far sì che metta in alto tutti gli utenti con più referenti, e poi metta un limite di 5. Il comando SQL per fare una cosa del genere lo so già (più o meno): " ORDER BY ??? LIMIT 5 "   Solo che non so come diamine incatenarlo.
 

Spero davvero tu abbia una pazienza immagine nell'aiutarmi, se è necessario sono disposto a pagare!

risposto 4 anni fa
Clear
Clear
21
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda