MySQL, ottieni utenti in classifica

Ho una tabella mysql come di seguito:

id name points 1 john 4635 3 tom 7364 4 bob 234 6 harry 9857 

Fondamentalmente voglio ottenere una classifica utente individuale senza selezionare tutti gli utenti. Voglio solo selezionare un singolo utente per id e ottenere il rank degli utenti che è determinato dal numero di punti che hanno.

Ad esempio, torna su tom con il grado 2 selezionato dall’ID 3.

Saluti

Eef

     SELECT uo.*, ( SELECT COUNT(*) FROM users ui WHERE (ui.points, ui.id) >= (uo.points, uo.id) ) AS rank FROM users uo WHERE id = @id 

    Grado denso:

     SELECT uo.*, ( SELECT COUNT(DISTINCT ui.points) FROM users ui WHERE ui.points >= uo.points ) AS rank FROM users uo WHERE id = @id 

    La soluzione di @Quassnoi fallirà in caso di vincoli. Ecco la soluzione che funzionerà in caso di legami:

     SELECT *, IF (@score=ui.points, @rank:[email protected], @rank:[email protected]+1) rank, @score:=ui.points score FROM users ui, (SELECT @score:=0, @rank:=0) r ORDER BY points DESC 
      SET @rownum := 0; SELECT rank, score FROM ( SELECT @rownum := @rownum +1 AS rank, `score` ,`user_id` FROM leaderboard ORDER BY `score` DESC , `updated_timestamp` ) as result WHERE `user_id`=$user_id LIMIT 1