Joomla.it Forum

Non solo Joomla... => Database => : paskuale.it 16 Sep 2011, 12:06:50

: Consiglio su Query.
: paskuale.it 16 Sep 2011, 12:06:50
Salve ho una tabella contenente gli id_user e relativi punteggi di un gioco, volendo mostrare ad ogni singolo utente la propria posizione una volta ordinata in maniera decrescente la query come posso impostarla ?

grazie
: Re:Consiglio su Query.
: mmleoni 16 Sep 2011, 12:22:32
non ho capito... vuoi tutti i punteggi o solo quello dello specifico utente o che?

ciao,
marco

: Re:Consiglio su Query.
: paskuale.it 16 Sep 2011, 12:28:50
Solo di un utente, (dopo il login) nel proprio pannello ...

grazie  ;)
: Re:Consiglio su Query.
: mmleoni 16 Sep 2011, 12:37:07
io farei così:

:
$user = JFactory::getUser();
$db =& JFactory::getDBO();
$query = "SELECT * FROM `#__tabella_punteggi` WHERE `id_user` = {$user->id}";
$db->setQuery( $query );
$row = $db->loadObject();

$row è un oggetto e contiene tutti i campi della tabella (es: $row->id_user),  ovviamente è meglio verificare che l'utente sia loggato, altrimenti la query non restituirà niente.

ps: se devi prendere un singolo valore, a che serve ordinare la tabella?

ciao,
marco

: Re:Consiglio su Query.
: paskuale.it 16 Sep 2011, 12:41:27
Eh no ... così prendo il punteggio, a me serve la posizione nel ranking tra tutti gli utenti ... voglio sapere se è primo decimo ... centesimo ... o altro ..

grazie
: Re:Consiglio su Query.
: mmleoni 16 Sep 2011, 12:54:08
ecco perché non capivo...   :(
due strade: o prendi tutto il record set (ordinato) e conti gli elementi finché non trovi lo id_user, o, dato il punteggio dell'utente conti quanti ne ha davanti. nel secondo caso, aggiungi al codice:

:
$query = "SELECT COUNT(*) as position FROM `#__tabella_punteggi` WHERE `punteggio` > {$row->punteggio}";
$db->setQuery( $query );
$row = $db->loadObject();

ovviamente la posizione è $row->position + 1.

il secondo metodo è preferibile se vi sono molti utenti. anche in questo caso non è necessario ordinare la tabella, ma sarebbe meglio se punteggio fosse un indice.

ps: a seconda della versione di mysql potresti fare anche una sola query.

ciao,
marco

: [SOLVED] Consiglio su Query (ranking).
: paskuale.it 16 Sep 2011, 13:48:52
Grazie infinite, ho usato le 2 query a catena come mi hai consigliato, e poi incremento il valore finale di uno x avere il dato.

ciao  ;)