Classement

Mammouth du PHP | 19672 Messages

04 oct. 2005, 23:35

Pas nécessairement, tu n'as qu'une seule requête, le reste se fait par programmation. Il y aurait peut-être une astuce pour le classer directement lors de la requête SQL, mais je ne vois pas, il faudrait un Gourou du SQL pour te répondre :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

04 oct. 2005, 23:43

il faudrait un Gourou du SQL pour te répondre :-k
C'est vrai j'ai lachement jetté Steffy dans tes griffes en espérant que tu soit ce gourou :langue:

Mais bon l'idée du tableau tient debout, aller au boulot :ordi:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 55 Messages

04 oct. 2005, 23:53

Ben écoutez merci pour votre temps et vos idées :) je vais essayer de faire quelques test et je vous tiens au courant si j'avance...

Merci !

Eléphant du PHP | 70 Messages

04 oct. 2005, 23:59

Pour ce qui est de ne pas stocker un résultat dans une base de données, ça se discute car dans une application de gestion, par exemple un compte bancaire, on ne recalcule pas le solde en prenant en compte toutes les opérations à chaque ajout. On stocke le solde à chaque fois et on prend le dernier pour ajouter ou enlever la somme de la nouvelle opération. Sinon les calculs sont bien trop lourds.

A part ça je propose une solution avec un tableau qui servirait d'index des scores :
$resultat = array( // Simulation résultat BdD
	0 => array("TOTO1", 10, "03/01/2005"),
	1 => array("TOTO2", 5, "02/01/2005"),
	2 => array("TOTO3", 8, "01/01/2005"),
	3 => array("TOTO4", 5, "01/01/2005")
);
// Devrait être fait pendant la récupération des résultats dans la base :
$scoreIndex = array();
foreach ($resultat as $key => $value)
	$scoreIndex[] = $value[1];
// -- fin de la récupération des données dans la base
$scoreIndex = array_unique($scoreIndex); // Enlever les doublons
rsort($scoreIndex); // Tri décroissant
echo "Nom - Score - Date - Classement<br><br>";
foreach ($resultat as $key => $value){
	$pos = (array_search($value[1], $scoreIndex) + 1); // +1 car tableau indexé à partir de 0
	echo $value[0] . " - " . $value[1] . " - " . $value[2] . " - " . $pos . "<br>";
}

Eléphant du PHP | 70 Messages

05 oct. 2005, 00:01

Pardon j'ai oublié le résultat que je voulais insérer :

Code : Tout sélectionner

Nom - Score - Date - Classement TOTO1 - 10 - 03/01/2005 - 1 TOTO2 - 5 - 02/01/2005 - 3 TOTO3 - 8 - 01/01/2005 - 2 TOTO4 - 5 - 01/01/2005 - 3

Eléphant du PHP | 55 Messages

05 oct. 2005, 00:04

Merci Liquid je vais tenté de suivre ta voix...

Eléphant du PHP | 70 Messages

05 oct. 2005, 00:08

Précision par rapport au fait de ne pas stocker le classement dans la base. Ce système oblige à récupérer tous les enregistrements afin de pouvoir calculer le classement des uns par rapport aux autres. Par contre en stockant le classement on peut faire des requêtes avec une clause LIMIT sans avoir à faire de calcul. :idea:

Eléphant du PHP | 70 Messages

05 oct. 2005, 00:11

Sinon Steffy, suis plutôt ma voie, car ma voix à cette heure là est assez médiocre :D .

Eléphant du PHP | 55 Messages

05 oct. 2005, 00:33

Désolé pour cette faute d'orthographe cher ami :roll: