Mettre à jour le classement sur la table
Question
J'ai deux tables:
mysql> desc rank ;
+----------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| score_id | int(11) | NO | MUL | NULL | |
| user_id | int(11) | NO | MUL | NULL | |
| rank | int(11) | NO | MUL | NULL | |
| last_rank | int(11) | NO | MUL | NULL | |
+----------------+-------------+------+-----+---------+----------------+
mysql> desc score ;
+----------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| points | int(11) | NO | MUL | NULL | |
+----------------+-------------+------+-----+---------+----------------+
Ce que je dois faire, c'est une fois par jour, mettre à jour le «rang» de tous les enregistrements. Une fois par semaine, mettez à jour le «Last_Rank» de tous les enregistrements.
Je peux faire une sélection qui renvoie un rang pour chaque ligne:
SET @r = 0 ;
SELECT a.user_id, a.rank, @r:= (@r+1), a.last_rank,
b.points
FROM rank AS a
JOIN score AS b
WHERE a.score_id = b.id
ORDER BY b.points ;
Cependant, je ne trouve pas de moyen de mettre à jour le tableau de rang avec ce résultat ...
- Comment puis-je faire ceci?
- Existe-t-il une meilleure façon (rapide) de le faire?
Version MySQL:
mysql> SELECT VERSION();
+------------+
| VERSION() |
+------------+
| 5.1.61-log |
+------------+
Pas de solution correcte
Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange