2010-04-06 5 views
1

J'ai une table avec (essentiellement) 3 colonnes - nom, votes et rang. Je veux ordonner la table par votes et ensuite mettre à jour 'rank' pour refléter cet ordre, de sorte que celui avec le plus de votes aura le rang fixé à 1, le deuxième plus de votes à 2, etcCréation d'un index numérique sur une table MySQL

Je peux le faire en PHP mais cela semble très inutile - y a-t-il un moyen de le faire avec une requête SQL sans avoir à traiter manuellement tous les enregistrements en PHP?

+1

Pour quoi avez-vous besoin de cette colonne? Ne serait-il pas plus facile de toujours trier par colonne «votes» au lieu de maintenir une autre colonne? –

+0

Je veux montrer le rang, mais ne pas révéler les suffrages exprimés. – DCD

Répondre

2

En supposant que vous ne vous souciez pas des liens, vous pouvez simplement calculer le rang dynamiquement dans vos requêtes au lieu de le stocker.

SET @rank=0; 

SELECT @rank:[email protected]+1 AS rank, name, votes 
FROM yourTable 
ORDER BY votes DESC; 
2

Bien que @johnfx vous a donné la bonne réponse, je pense que vous serez intéressé à lire les commentaires de cet article - http://arjen-lentz.livejournal.com/55083.html où divers problèmes de classement sont résolus.