additionner des valeurs dans des champs différents d'un bbd

manhemane
Invité n'ayant pas de compte PHPfrance

27 janv. 2007, 23:58

Voici la structure de ma bbd
users--userspassword--usersemail--quiz51--quiz52--quiz53--quiz54

Je souhaite afficher par ordre décroissant le total des points gagnés pour chaque quiz.
cela fait deux jours que je cherche, je teste et je ne trouve pas.
Comment faire ?

HD
Mammouth du PHP | 1181 Messages

28 janv. 2007, 00:00

"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

manhemane
Invité n'ayant pas de compte PHPfrance

28 janv. 2007, 00:12

merci mais j'arrive à faire la somme voici mon code :
<?php


$dbhost = "----";
$dbusername = "------"; 
$dbuserpassword = "--------";
$dbname = "-------"; 


$link = mysql_connect ($dbhost, $dbusername, $dbuserpassword);

if (!$link) {
	echo "&result=noconnection";
} else {
	mysql_select_db($dbname);
}

$query = "SELECT * FROM clubers ORDER BY quiz51 DESC LIMIT 0, 50;";
$result = mysql_query ($query);

$count = 0;

while ($query_data = mysql_fetch_array ($result)) {
		$userName = $query_data ["userName"];
		$quiz51 = $query_data ["quiz51"];
		$quiz52 = $query_data ["quiz52"];
		$quiz53 = $query_data ["quiz53"];
		$quiz54 = $query_data ["quiz54"];
		$quiz50 = $quiz51+$quiz52+$quiz53+$quiz54;
		
				
		echo "&player$count=$userName"; 
		echo "&score$count=$quiz50";
			
		$count++;
}


echo "&result=okay";
echo "&rows=$count&";

?>
Mais le problème est que les scores ne sont pas rangés par ordre décroissant. Que faut-il mettre après le order by dans ma cas ?[/php]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

28 janv. 2007, 00:14

Tu ne pourras pas obtenir ce résultat avec une requete... passe par un traitement PHP.
Récupère les totaux et autres données dans un tableau multidimensionel et affiche en fonction.

Question en retour :
Comment tu fait pour distinguer les quiz ?
Lors de chaque nouveau quiz tu ajoutes un nouveau champ ?

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

28 janv. 2007, 00:15

Modération :
manhemane, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Je l'ai fait pour toi cette fois ci mais pense y.

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

manhemane
Invité n'ayant pas de compte PHPfrance

28 janv. 2007, 00:23

oui mais je le fais manuellement depuis le serveur (chez free)
j'ai pas vraiment compris ta méthode car le code posté est une page php.
Tu peux détailler un peu. Merci à toi. je veux absolument résoudre ce problème, j'ai passé trop de temps à chercher.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

28 janv. 2007, 00:24

Nouveaux éléments.... à la vue de ton code tu disposes déjà des totaux dans un des champs...

Ce que tu voudrait est donc d'additioner les champs puis trier en fonction de ce nouveau total.
SELECT quiz51+quiz52+quiz53+quiz54 as total  FROM clubers ORDER BY total DESC 
Ceci dit les 2questions remarques restent valables.

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

manhemane
Invité n'ayant pas de compte PHPfrance

28 janv. 2007, 00:26

ok en tout cas merci. Je vais essayer tout de suite et je te dis quoi.
En tout cas merci encore. Je vais tester...

Invité
Invité n'ayant pas de compte PHPfrance

28 janv. 2007, 00:36

J'ai essayer et je n'ai aucun nom de joeur qui apparait et tous les scores sont de 0:
voici ce que j'ai changé :
$link = mysql_connect ($dbhost, $dbusername, $dbuserpassword);

if (!$link) {
	echo "&result=noconnection";
} else {
	mysql_select_db($dbname);
}

// set query to call top 50 //

$query = "SELECT quiz51+quiz52+quiz53+quiz54 as total  FROM clubers ORDER BY total DESC LIMIT 0, 50;"; 
$result = mysql_query ($query);

// init count
		
$count = 0;

// fetch data and output

while ($query_data = mysql_fetch_array ($result)) {
		$userName = $query_data ["userName"];
		$quiz51 = $query_data ["quiz51"];
		$quiz52 = $query_data ["quiz52"];
		$quiz53 = $query_data ["quiz53"];
		$quiz54 = $query_data ["quiz54"];
		$quiz50 = $quiz51+$quiz52+$quiz53+$quiz54;
		// data outputted as variables of this form : player0=myname ... player9=yourname //
				
		echo "&player$count=$userName"; 
		echo "&score$count=$quiz50";
			
		$count++;
}

// send extra data to flash //

echo "&result=okay";
echo "&rows=$count&";

?>

manhemane
Invité n'ayant pas de compte PHPfrance

28 janv. 2007, 00:44

petite modification :
je ne dispose pas du total dans un des champs de ma base de données car sinon je n'aurai pas eu de problème à le faire.
Le premier code posté me permet simplement d'afficher le total des points de chaque quiz pour chaque joeur mais seulement ces scores ne sont pas rangés par ordre décroissant. le problème est après le order by.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

28 janv. 2007, 00:47

Je ne repasserai pas une 3ème fois sur ton message pour le mettre en forme .
Utilise les balises
 !!![/color]

Et ça m'apprendra à donner une réponses sans faire réfléchir  :roll: 

Ce que je t'ai donné n'est ni plus ni moins ce que tu devrais appliquer mais cette requete n'est certainement pas la pour etre copiée/collée.

Il n'y a plus la sélection des autres champs dans cette requete tu dois les rajouter...

"total" est un alias... sorte de champ temporaire le temps de la requête

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

manhemane
Invité n'ayant pas de compte PHPfrance

28 janv. 2007, 00:52

je comprends pas pourquoi tu t'énerves. Je savais que le monde change et que les gens je supporte de moins en moins. Même sur les forums les gens deviennent agressifs ? alors que que ces forum sont destinés à s'aider même quand la personne ne comprend pas ??
Quel monde sommes nous en train de construire ?
J'ai résolu mon problème avec ton aide et je te dit merci quand même.
Voici ce que j'ai écrit : (c'est peut être pas correcte mais ca fonctionne)
$link = mysql_connect ($dbhost, $dbusername, $dbuserpassword);

if (!$link) {
	echo "&result=noconnection";
} else {
	mysql_select_db($dbname);
}

// set query to call top 50 //

$query = "SELECT * FROM clubers ORDER BY quiz51+quiz52+quiz53+quiz54 DESC LIMIT 0, 50;";
$result = mysql_query ($query);

// init count
		
$count = 0;

// fetch data and output

while ($query_data = mysql_fetch_array ($result)) {
		$userName = $query_data ["userName"];
		$quiz51 = $query_data ["quiz51"];
		$quiz52 = $query_data ["quiz52"];
		$quiz53 = $query_data ["quiz53"];
		$quiz54 = $query_data ["quiz54"];
		$quiz50 = $quiz51+$quiz52+$quiz53+$quiz54;
		// data outputted as variables of this form : player0=myname ... player9=yourname //
				
		echo "&player$count=$userName"; 
		echo "&score$count=$quiz50";
			
		$count++;
}

// send extra data to flash //

echo "&result=okay";
echo "&rows=$count&";

?>

HD
Mammouth du PHP | 1181 Messages

28 janv. 2007, 01:05

il vaudrait mieux remplacer
$query = "SELECT * FROM clubers ORDER BY quiz51+quiz52+quiz53+quiz54 DESC LIMIT 0, 50;";
par
$query = "SELECT quiz51+quiz52+quiz53+quiz54 as total  FROM clubers ORDER BY total DESC LIMIT 0, 50;";
comme indiqué par Truc
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

manhemane
Invité n'ayant pas de compte PHPfrance

28 janv. 2007, 01:11

merci je vais essayer de nouveau.

manhemane
Invité n'ayant pas de compte PHPfrance

28 janv. 2007, 01:15

je viens d'essayer et cela ne marche pas avec la ligne de code que tu conseilles (je n'ai aucun nom de joeur et tous les scores sont de 0) alors que avec la ligne que j'ai écrit j'ai le nom de chaque joeur avec le total des quiz de chacun et les 50 meilleurs scores sont bien rangés par ordre décroissants.
Comment vous expliquer cela ??