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

    Ottenere il numero di riga di una tabella mysql contenente un nome specifico

    Buongiorno a tutti! All'interno del mio database mysql ho una tabella chiamata "scores" che contiene tre colonne: "id","name","score". Da notare che nella tabella non ci potranno mai essere due nomi uguali. Ora vorrei, con uno script php che riceve in ingresso uno specifico nome contenuto nel db, calcolare quale sia il numero di riga in cui questo nome si trova sapendo che la tabella deve essere ordinata per "score" DESC. Per esempio, nel caso in figura:
    se il nome corrente è "LEVELs" il risultato sarà 4, mentre se il nome è "alektab7.0" sarà 5.

    Ho provato con il seguente script php che funziona perfettamente tranne proprio nel caso sopra riportato, ovvero quando due nomi hanno lo stesso punteggio. (Nel caso di "LEVELs" e "alektab7.0" per entrambi il risultato è 4!!!).
    Codice PHP:
    <?php
    include("common.php");
        
    $link=dbConnect();

        
    $name safe($_POST['name']);

        
    // gets all the records with higher or equal scores than current user
        
    $ranking mysql_query("SELECT count(*) + 1 AS ranking FROM scores WHERE score > (SELECT score FROM scores WHERE name = '$name' ORDER BY score DESC LIMIT 1)");
        
    // creates an array from the mysql query above
        
    $ranking_array mysql_fetch_assoc($ranking); 
        
    // gets the number of higher scores from the array
        
    $ranked_above $ranking_array['ranking']; 
        
    // takes the total number ranked above
        
    $current_rank $ranked_above;
        echo 
    $current_rank;
    ?>
    Grazie mille a chiunque potrà aiutarmi!!!

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Ma il numero deve essere l'id, oppure il numero della riga nei risultati ordinari?

    Per capirci, se il risultato della query fosse
    codice:
    ----------------------
    | ID | Nome  | Score |
    ----------------------
    |  3 | Pippo |   80  |
    |  5 | Pluto |   68  |
    |  1 | Qui   |   55  |
    |  2 | Qua   |   51  |
    |  4 | Quo   |   47  |
    ----------------------
    E il nome richiesoto fosse "Qua" il risultato deve essere 2 (il suo id) o 4 (la riga in cui compare)?

  3. #3
    Grazie per la risposta. Il risultato, nel caso da te proposto, deve essere 4 (la riga in cui compare).

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Devi ciclare sul risultato confrontando ad ogni ciclo il nome cercato con quello della riga corrente, ad ogni ciclo incrementi una variabile contatore, appena trovi il nome hai la sua posizione nella variabile contatore.

  5. #5
    Ah, ok! Credo di aver capito. Allora provo e farò sapere. Grazie

  6. #6
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Devi ciclare sul risultato confrontando ad ogni ciclo il nome cercato con quello della riga corrente, ad ogni ciclo incrementi una variabile contatore, appena trovi il nome hai la sua posizione nella variabile contatore.
    Fattooo!!!
    Non avevo proprio pensato a questa soluzione.
    Ora funziona perfettamente...posto il codice php nel caso possa essere utile a qualcun altro.
    Codice PHP:
    <?php
    include("common.php");
        
    $link=dbConnect();

        
    $name safe($_POST['name']);

        
    $i 1;
        
    $query=mysql_query("SELECT * FROM `scores` ORDER BY `score` DESC ")  or die(mysql_error());
        
        
        while(
    $row mysql_fetch_array($query))       
            {
                if (
    $row['name']==$name)
                {
                    echo 
    $i;
                }
                else
                {
                    
    $i += 1;
                }
            }
    ?>

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Se devi cercare solo un nome, dopo
    echo $i

    mettici un break;

    è inutile continuare il ciclo se hai trovato il nome cercato.

  8. #8
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Se devi cercare solo un nome, dopo
    echo $i

    mettici un break;

    è inutile continuare il ciclo se hai trovato il nome cercato.
    Giusto. Grazie ancora!

Tag per questa discussione

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.