Mysql leggere posizione classifica
Mysql leggere posizione classifica postato il 12/09/2017 21:41:33 nel forum programmazione, open source e hosting
Buonasera, ho un quesito di mysql e php:
Ogni utente ha un punteggio, questo punteggio è letto da un database mysql, con un select che punta all'utente e non attraverso un ciclo while, devo recuperare (in qualche modo) la posizione dell'utente come fosse in una classifica.
Pagine → 1
12/09/2017 21:53:59
Lavora con il 'ORDER BY'
12/09/2017 22:01:34
Non devo ordinarla ma sapere la posizione dove si trova l'utente, esempio:
ho TOT utenti
utente_1
utente_2
Utente_3
io sono l'utente_1 interrogo il DB per sapere il mio punteggio, dovrei riuscire a farmi dire in che posizione sono della classifica
12/09/2017 23:18:37
Se non ordini gli utenti secondo un criterio, come pensi di ottenere una posizione ?
Ad ogni modo, poiché all'interno del database i record sono immagazzinati tramite id progressivo, hai bisogno di un campo che venga modificato e che mostra l'eventuale posizione in classifica. A quel punto ti basta andare a cercarti l'utente che ti interessa e stampare il campo con la posizione che ti serve.
13/09/2017 00:37:23
Non è esattamente un lavoro per cui SQL è stato pensato, infatti di base non sarebbe possibile farlo.
Ma utilizzando caratteristiche del dialetto SQL implementato da MySql è possibile trovare un modo di farlo.
Non hai specificato bene come tieni questo punteggio del personaggio perciò ti farò vedere come l'ho fatto io con un punteggio che ho nella mia tabella dei personaggi:
SELECT x.position
FROM (SELECT P.UID, @rownum := @rownum + 1 AS position
FROM Personaggio P
JOIN (SELECT @rownum := 0) r
ORDER BY P.punti DESC) x
WHERE x.ID = ID_DEL_PERSONAGGIO
13/09/2017 09:00:21 e modificato da wildbug il 13/09/2017 09:04:08
Credo che questo sia il metodo più semplice
SELECT Id, Nome, Punteggio, FIND_IN_SET( Punteggio, (
SELECT GROUP_CONCAT( Punteggio
ORDER BY Punteggio DESC )
FROM User )
) AS Posizione_Classifica
FROM User
WHERE Id = /* L'Id che cerchi */
Se vuoi l'intera classifica basta togliere la clausola WHERE, attenzione però che, se alcuni utenti si ritrovano con lo stesso punteggio avranno anche la stessa Posizione_Classifica.
13/09/2017 10:33:24 e modificato da de1980 il 13/09/2017 11:06:58
ho risolto in php facendo un if dentro al ciclo while che legge la tabella contando i cicli che fa il while, sembra funzioni:
$count = 0;
$que_prova = "SELECT username, punti FROM classifica GROUP BY punti ORDER BY punti DESC ";
$res_prova = mysql_query($que_prova);
while($arr_prova = mysql_fetch_assoc($res_prova)){
if($arr_prova['username'] == $utente){
$utente_posizione = $arr_prova['username'] . " " .(++$count);
break;
}
else{
$utente_posizione = $arr_prova['username'] . " " .(++$count);
}
}
echo $utente_posizione;
13/09/2017 11:19:42
Avevo capito dal messaggio iniziale che non volevi utilizzare php 😁
14/09/2017 12:40:37 e modificato da blancks il 14/09/2017 13:14:39
Vista la struttura della tua tabella, a mio modesto avviso, puoi evitare il while.
Ti mostro come la gestirei io: http://sqlfiddle.com/#!9/dda4d/7 ↗
14/09/2017 17:38:24
not bad, not bad. E non utilizza neanche istruzioni o variabili specifiche di MySql
14/09/2017 18:32:32
leoblacksoul ha scritto: ..non utilizza neanche istruzioni o variabili specifiche di MySql
Grazie!
Per il resto si, sono un amante delle soluzioni semplici :-p
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Wuthering Waves ↗
Storie di Agarthi ↗
State of Survival ↗
Neverness to Everness ↗
Fallen Gods ↗
Hero Wars ↗
AlterEgo ↗
Tiles Survive ↗
World of the Sea Battle ↗