Ok, je vais tenter de traduire.
C'est du SQL assez avancé qu'on a là. Je pense que tu auras compris que la première ligne crée des variables (en SQL) comme on le fait dans pratiquement n'importe quel langage de programmation :
SET @num :=0, @rank :=0, @prev := NULL;
Chacune de ces variable est donc initialisée à 0 ou NULL.
Ensuite on les utilise dans la requête suivante pour établir un classement. Note qu'il y a, outre ces variables, l'utilisation de la fonction SQL if(expr, val-si-true, val-si-false).
En utilisant une mise en forme un peu différente, ce sera peut-être plus facile à suivre :
SELECT
@num := @num + 1 AS row,
@rank := if(@prev != php, @num, @rank) AS rank,
country,
@prev := php AS php
FROM statsPHP
ORDER BY php
Très très schématiquement (et si je ne fais pas erreur), MySQL va incrémenter @num pour chaque nouvelle ligne trouvée répondant aux critères de tris défini comme ici dans le ORDER BY. Pour chaque ligne, on affecte à @rank soit @num si @prev est différent de «php», soit @rank, puis on affecte «php» à @prev.
Je dois avouer que ça me dépasse un brin à ce niveau là, je ne fais que de la déduction logique par rapport au code, mais il faudrait que je bidouille là-dessus pas mal de temps pour maitriser ce concept.
En tous cas c'est une jolie trouvaille à explorer, dommage que je manque un peu de temps là, désolé ne ne pas être d'un plus grand secours... :-/
______________________________________________________________
Une question bien formulée, c'est un problème bien compris : ça représente déjà les 3/4 de la réponse ;)