19-08-2010, 08:18 AM
(Modification du message : 19-08-2010, 08:23 AM par christouphe.)
J'avais fait un truc dans le style en mettant deux attributs supplémentaires à un membre/joueur (place_actuelle et place_precedente)
Puis 3 fonctions me permettait de mettre à jour mon classement:
Code :
table membres (
id,
pseudo,
...,
place_actuelle int(5) default 10000,
place_precedente int(5) default 10000,
...,
PK(id)
)
Code :
table config (
-- des data
`flag_classement` enum('0','1','2') NOT NULL COMMENT 'flag de mise a jour classement',
-- d'autres data
)
Puis 3 fonctions me permettait de mettre à jour mon classement:
Code PHP :
<?php
/**
*
* @param Ressource $_con - connexion à la base
* @param integer $_limit - pour le classement des $_limit meilleurs
* @return Ressource de type resultSet
*/
function donneClassement($_con,$_limit=false) {
$req = "SELECT id,pseudo,points,place_precedente,place_actuelle
FROM membres
ORDER BY points DESC";
if ($_limit) {
$req .= " LIMIT 0,10";
}
//Ici lanceRequete() est une fonction qui fait
//le lancement de la requête vers le moteur SQL
$result = lanceRequete($req,$_con);
return $result;
}
Code PHP :
<?php
/**
*
* @param Ressource $_con - connexion à la base
* @param integer $_flag - état du flag pour savoir si on mets à jour
* @return boolean - true => OK, false => ARFF problème ;-)
*/
function majClassement ($_con,$_flag) {
$result = lanceRequete("SET AUTOCOMMIT = 0",$_con);
$result = donneClassement($_con);
$place = 1;
while ($data = mysql_fetch_assoc($result)) {
$req = "UPDATE membres SET place_precedente = ".$data['place_actuelle'].",
place_actuelle = ".$place." WHERE id = ".$data['id'];
$result2 = lanceRequete($req,$_con);
if (!$result) {
rollback($_con);
//On renvoie FAUX => Affichage non modification.
return false;
}
$place += 1;
}
//MAJ du flag
$req = "UPDATE config SET flag_classement = '".$_flag."'";
$result2 = lanceRequete($req,$_con);
if (!$result2) {
rollback($_con);
//On renvoie FAUX => Affichage non modification.
return false;
}
lanceRequete("COMMIT",$_con);
$result = lanceRequete("SET AUTOCOMMIT = 1",$_con);
return true;
}