Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Piazzamento di un utente

    Salve a tutti,
    la mia domanda è abbastanza semplice, spero lo sia anche la soluzione

    Ho un DB in cui ho registrato dei punteggi per ogni utente

    example:

    Pippo | 400
    Bukowski | 150
    Andrea | 1.231
    Luca | 320

    Ora vorrei semplicemente fare una query per il piazzamento di un utente specifico:

    esempio: Ciao Bukowski, il tuo piazzamento è la 4° posizione!

    Come posso fare?

    Grazie mille
    Perchè uso Maxthon? | Mi piace questa chat

  2. #2
    Codice PHP:
    $utente="pippo";
    $query "SELECT * FROM nome_tabella WHERE utente='$utente'";
    $result mysql_query($query$db);
    $num =mysql_affected_rows();
    if (
    $num=="0")
        die(
    "non c'è nessuno utente di nome pippo");
    while (
    $row mysql_fetch_array($result))
        {
        
        
    $messaggio="Ciao $utente questo è il tuo punteggio: $row[punteggio]";
       } 
    Un tardo hegeliano di Busalla / allevava un gorilla nella stalla
    citando Adorno nell notti chiare / finché il primate stanco di ascoltare
    lo strangolò con una sciarpa gialla Dillo Con Parole Sue

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654
    ci provo
    Fai una query ordinando la tabella secondo il piazzamento (basta un ORDER BY colonna_piazzamento). Quindi estrai nome e piazzamento è ci metti un valore incrementale:
    Codice PHP:
    $i=1;
    while (
    $row=mysql_fetch_array($query)){
    $nome=$row["colonna_nome"];
    echo 
    "ciao $nome, il tuo piazzamento è la posizione $i";
    $i++;


  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    set @posizione = 0;
    select *, @posizione := @posizione + 1 as posizione from tabella order by punteggio desc
    Se puoi usare le subquery

    codice:
    select count(*) + 1 as posizione from 
    (select * from tabella where punteggio > 
    (select punteggio from tabella where nome ='Bukowski') order by punteggio desc) as tab2;
    oppure, meglio ancora

    codice:
    SET @riga = 0, @posizione = 0, @preced = 0;
    SELECT @riga := @riga + 1 AS riga, nome,
    @posizione := IF(@preced<>punteggio,@riga,@posizione) AS posizione,
    @preced := punteggio AS punteggio
    FROM tabella ORDER BY punteggio DESC

  5. #5
    Grazie a tutti per i numerosi aiuti ... strano ma vero, purtroppo nessuno di questi mi ha risolto il problema.

    nicola75ss le tue soluzioni sono sicuramente quelle più interessanti (hai un know how da far spavento, i miei più sentiti complimenti!!!) ma purtroppo non soddisfano la mia richiesta, probabilmente colpa mia che non ho spiegato a dovere il mio problema.
    La tua soluzione in pratica mi tira fuori la posizione per ogni utente, ovvero:

    Bukowski | 1
    Luca | 2
    Pippo | 3
    Andrea | 4

    Il mio problema invece è tirare fuori la posizione di un determinato utente.

    Immagina di essere nella scheda utente di Bukowski .... ora vorrei dirgli "Ciao Bukowski, tu sei in 1° posizione!" .... col tuo metodo invece mi vengono fuori tutti ... anzichè la sola posizione del nick specifico "...WHERE nick = Bukowski" ...


    Grazie mille e scusate il ritardo della risposta
    Perchè uso Maxthon? | Mi piace questa chat

  6. #6
    scusa ma il mio codice non te lo da?
    Un tardo hegeliano di Busalla / allevava un gorilla nella stalla
    citando Adorno nell notti chiare / finché il primate stanco di ascoltare
    lo strangolò con una sciarpa gialla Dillo Con Parole Sue

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    La seconda query farebbe proprio al caso tuo se potessi usare le subquery.

    Prova con una tabella temporanea

    codice:
    SET @riga = 0, @posizione = 0, @preced = 0;
    create temporary table posizioni
    SELECT nome,@riga := @riga + 1 AS riga,
    @posizione := IF(@preced!=punti,@riga,@posizione) AS posizione,
    @preced := punti AS punti
    FROM tabella 
    ORDER BY punti DESC
    e poi

    select posizione from posizioni where nome = 'Bukowski'

  8. #8
    Originariamente inviato da nicola75ss
    La seconda query farebbe proprio al caso tuo se potessi usare le subquery.

    Prova con una tabella temporanea

    codice:
    SET @riga = 0, @posizione = 0, @preced = 0;
    create temporary table posizioni
    SELECT nome,@riga := @riga + 1 AS riga,
    @posizione := IF(@preced!=punti,@riga,@posizione) AS posizione,
    @preced := punti AS punti
    FROM tabella 
    ORDER BY punti DESC
    e poi

    select posizione from posizioni where nome = 'Bukowski'
    Stavo ritestando la tua subquery e mi sono accorto che effettivamente funziona (l'avevo provato sul mio nick). In effetti su un nick che non è in posizione mi restituisce "posizione 1"

    c'è modo per intercettare uno che non c'è ??

    grazie
    Perchè uso Maxthon? | Mi piace questa chat

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Un'idea potrebbe essere questa: recuperi tutte le posizioni della tua classifica e le metti dentro un array con chiave il nome e valore la posizione stessa. A questo punto fai una verifica sulla chiave dell'array.

    Codice PHP:
    $query1 mysql_query("SET @rownum = 0, @rank = 0, @prev_val = NULL") or die(mysql_error() );
    $query2 mysql_query("SELECT nome,@riga := @riga + 1 AS riga, nome,
                           @posizione := IF(@preced<>punteggio,@riga,@posizione) AS posizione,
                           @preced := punteggio AS punteggio
                           FROM tabella ORDER BY punteggio DESC"
    ) or die(mysql_error() );
                          
    while (
    $row mysql_fetch_assoc($query2) ){
    $results[$row['nome']] = $row['posizione'];
    }

    $nome 'Bukowski'//esempio
    echo array_key_exists($nome,$results) ? $results[$nome] : 'non è presente in classifica'

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.