Page 1 sur 3

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

Posté : 27 janv. 2007, 23:58
par manhemane
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 ?

Posté : 28 janv. 2007, 00:00
par HD

ok

Posté : 28 janv. 2007, 00:12
par manhemane
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]

Posté : 28 janv. 2007, 00:14
par Truc
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 ?

Posté : 28 janv. 2007, 00:15
par Truc
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.

Posté : 28 janv. 2007, 00:23
par manhemane
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.

Posté : 28 janv. 2007, 00:24
par Truc
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.

Posté : 28 janv. 2007, 00:26
par manhemane
ok en tout cas merci. Je vais essayer tout de suite et je te dis quoi.
En tout cas merci encore. Je vais tester...

Posté : 28 janv. 2007, 00:36
par Invité
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&";

?>

Posté : 28 janv. 2007, 00:44
par manhemane
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.

Posté : 28 janv. 2007, 00:47
par Truc
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

Posté : 28 janv. 2007, 00:52
par manhemane
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&";

?>

Posté : 28 janv. 2007, 01:05
par HD
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

Posté : 28 janv. 2007, 01:11
par manhemane
merci je vais essayer de nouveau.

Posté : 28 janv. 2007, 01:15
par manhemane
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 ??