Précédent   Forum des professionnels en informatique > PHP > Scripts
Scripts Forum d'entraide sur les scripts PHP téléchargés. Les meilleurs scripts PHP, la FAQ scripts PHP, toutes les FAQ PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/09/2006, 13h33   #1
Futur Membre du Club
 
Inscription : août 2004
Messages : 39
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : août 2004
Messages : 39
Points : 19
Points : 19
Par défaut trier un résultat d'addition

Bonjour,
Après une matinée de recherche et de bidouillage, je demande un peu d'aide.
J'ai un petit script:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<html>
<head>
<title>Statistique </title>
 
</head>
 
<body>
 
<TABLE BORDER WIDTH=500>
 
<tr bgcolor="#CC0000">
       <td><center><b><font face="Verdana" size="2" color="#FFFFFF">Nom</font></b></center></td>
       <td>&nbsp;<b><font face="Verdana" size="2" color="#FFFFFF">Prenom</font></b></td>
       <td>&nbsp;<b><font face="Verdana" size="2" color="#FFFFFF">But</font></b></td>
	   <td>&nbsp;<b><font face="Verdana" size="2" color="#FFFFFF">Assist</font></b></td>
	   <td>&nbsp;<b><font face="Verdana" size="2" color="#FFFFFF">Total</font></b></td>
 
	   </tr></br>
 
<?php
 
$conn = mysql_connect("localhost", "", "");
if (!$conn) {
echo "Impossible de se connecter à la base de données : " . mysql_error();
   exit;
}
 
if (!mysql_select_db("")) {
   echo "Impossible de sélectionner la base mydbname : " . mysql_error();
   exit;
}
 
 
 
$sql = "SELECT `id` ,`nom` , `prenom` ,`but` ,`assist` FROM stat 
WHERE 1 ";
 
$result = mysql_query($sql);
 
if (!$result) {
   echo "Impossible d'exécuter la requête ($sql) dans la base : " . mysql_error();
   exit;
}
 
if (mysql_num_rows($result) == 0) {
   echo "Aucune ligne trouvée, rien à afficher.";
   exit;
}
 
 
while ($val = mysql_fetch_array($result, MYSQL_ASSOC)) // parcours des resultats  
 
{  
$id = $val['id'];
$nom = $val['nom'];
$prenom = $val['prenom'];
$but = $val['but'];
$assist = $val['assist'];
$resultat=$but+$assist;
 
 
?> <tr bgcolor="#FFFFFF"" class="tableau" width="500">
                           <td><font face="Verdana" size="2" color="#333333">&nbsp;
                                 <? echo $nom = $val['nom'] ?>
                           </font></td>
						   <td><font face="Verdana" size="2" color="#333333">&nbsp;
                               <? echo $prenom = $val['prenom'] ?>
                           </font></td>
						   <td><center><font face="Verdana" size="2" color="#333333">&nbsp;
                              <? echo $but = $val['but'] ?>
                           </font></center></td>
						   <td><font face="Verdana" size="2" color="#333333">&nbsp;
                               <? echo $assist = $val['assist'];?>
                           </font></td>
						   <td><font face="Verdana" size="2" color="#333333">&nbsp;
                               <? echo $resultat ?>
                           </font></td>	
 
                         </tr>
<?
 
} 
 
mysql_free_result($result);
 
?>
</TD> 
</TABLE>
 
</body>
</html>
qui marche très bien
Voir le résultat:
http://www.forwardhc.ch/~premiere/statistique.php

J'aimerai pouvoir trier la colonne du total (Résultat)
Merci de votre aide.
Defrancesco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 14h38   #2
Futur Membre du Club
 
Inscription : septembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 24
Points : 16
Points : 16
Si tu veux trier des résultats sur une variable qui n'est pas dans ta table MySQL tu dois d'abord récupérer tous les résultats dans une première étape et stocker tout dans des tableaux, sans rien afficher (une bonne pratique d'une manière générale même si tu n'as pas de tri à faire).

Code :
1
2
3
4
5
6
7
8
 
...
$resultat = array();
while (ta requête) {
...
    $assist[]   = $val['assist'];
    $resultat[] = $val['but']+$val['assist'];
}
Ensuite tu tries avec array_multisort, ça va certainement ressembler à ça :

array_multisort($resultat, SORT_DESC, $nom, etc.);

Enfin tu parcoures avec un for each et tu affiches.
BoneBreaker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 15h11   #3
Futur Membre du Club
 
Inscription : août 2004
Messages : 39
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : août 2004
Messages : 39
Points : 19
Points : 19
Merci d'avoir repondu, c'est très sympa.
J'ai essayé (Je suis un débutant) mais j'ai un message d'erreur:
Citation:
Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or sorting flag that has not already been specified in /home/www/799fd304049153850494d8da33f0c331/users/premiere/web/statistique_2.php on line 67
La partie du script modifié donne:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if (mysql_num_rows($result) == 0) {
   echo "Aucune ligne trouvée, rien à afficher.";
   exit;
}
$resultat = array();
 
while ($val = mysql_fetch_array($result, MYSQL_ASSOC))
 {
	$id = $val['id'];
	$nom = $val['nom'];
	$prenom = $val['prenom'];
	$but[]   = $val['but'];
    $assist[]   = $val['assist'];
    $resultat[] = $val['but']+$val['assist'];
}
 
 while ($val = array_multisort($resultat, SORT_DESC, $resultat)) // parcours des resultats  
 
{  
$id = $val['id'];
$nom = $val['nom'];
$prenom = $val['prenom'];
$but = $val['but'];
$assist = $val['assist'];
$resultat=$but+$assist;
Defrancesco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 15h36   #4
Membre régulier
 
Inscription : mai 2006
Messages : 60
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : mai 2006
Messages : 60
Points : 73
Points : 73
Envoyer un message via Skype™ à Tiois
Bien je ne sais pas si je suis dans le champs, mais je crois qu'il serait tout simplement plus facile de mettre un ORDER BY dans ta requête SQL, non ?

Quelquechose du genre :

Code :
1
2
3
 
$sql = "SELECT `id` ,`nom` , `prenom` ,`but` ,`assist`, SUM(but + assit) as total FROM stat 
WHERE 1 ORDER BY total";
Tiois est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 15h51   #5
Futur Membre du Club
 
Inscription : septembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 24
Points : 16
Points : 16
Citation:
Envoyé par Defrancesco
Merci d'avoir repondu, c'est très sympa.
J'ai essayé (Je suis un débutant) mais j'ai un message d'erreur:

La partie du script modifié donne:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if (mysql_num_rows($result) == 0) {
   echo "Aucune ligne trouvée, rien à afficher.";
   exit;
}
$resultat = array();
 
while ($val = mysql_fetch_array($result, MYSQL_ASSOC))
 {
	$id = $val['id'];
	$nom = $val['nom'];
	$prenom = $val['prenom'];
	$but[]   = $val['but'];
    $assist[]   = $val['assist'];
    $resultat[] = $val['but']+$val['assist'];
}
 
 while ($val = array_multisort($resultat, SORT_DESC, $resultat)) // parcours des resultats  
 
{  
$id = $val['id'];
$nom = $val['nom'];
$prenom = $val['prenom'];
$but = $val['but'];
$assist = $val['assist'];
$resultat=$but+$assist;
Tu dois retirer ce qui était dans ta boucle while initiale : il ne faut garder que ce while là :
Code :
1
2
3
4
5
6
7
8
9
10
 
while ($val = mysql_fetch_array($result, MYSQL_ASSOC))
 {
    $id[] = $val['id'];
    $nom[] = $val['nom'];
    $prenom[] = $val['prenom'];
    $but[]   = $val['but'];
    $assist[]   = $val['assist'];
    $resultat[] = $val['but']+$val['assist'];
}
Puis

Code :
1
2
3
4
5
 
array_multisort($resultat, SORT_DESC, $id, $nom, $prenom, $but, $assist);
for each ($resultat as $indice => $valeur) {
   // Ici ton tableau HTML avec les valeurs : $nom[$indice], etc.
}
Et sinon oui comme dit Tiois tu peux aussi faire ce tri dans la requête MySQL en rajoutant la colonne, comme ta fonction est simple (somme) c'est même plus immédiait.
BoneBreaker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 16h09   #6
Futur Membre du Club
 
Inscription : août 2004
Messages : 39
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : août 2004
Messages : 39
Points : 19
Points : 19
Merci à tous de consacrer un peu de temps à un vieux sfchnock comme moi.
Bon J'ai essayé de modifier ma requête comme tiois me l'a suggéré, mais j'ai ce message d'erreur:
Citation:
Impossible d'exécuter la requête (SELECT `id` ,`nom` , `prenom` ,`but` ,`assist`, SUM(but + assist) as total FROM stat WHERE 1 ORDER BY total) dans la base : Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Je ne sais plus à quel saint me dévoué.
Defrancesco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 16h12   #7
Membre régulier
 
Inscription : mai 2006
Messages : 60
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : mai 2006
Messages : 60
Points : 73
Points : 73
Envoyer un message via Skype™ à Tiois
Modifie ta requête comme suit alors :

Code :
1
2
 
SELECT `id` ,`nom` , `prenom` ,`but` ,`assist`, SUM(but + assist) as total FROM stat WHERE 1 GROUP BY id ORDER BY total


De plus, je ne comprends pas pourquoi tu te sert de "WHERE 1"
Tiois est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 16h17   #8
Futur Membre du Club
 
Inscription : septembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 24
Points : 16
Points : 16
Normal il te tend des pièges

SUM ne sert pas à additionner deux choses mais à sommer une colonne.

Code :
1
2
 
$sql = "SELECT `id` ,`nom` , `prenom` ,`but` ,`assist`, `but` + `assist` as total FROM stat ORDER BY total";
BoneBreaker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 16h22   #9
Futur Membre du Club
 
Inscription : août 2004
Messages : 39
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : août 2004
Messages : 39
Points : 19
Points : 19
Bingo, merci beaucoup cela marche très bien.
@+ daddy
Defrancesco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 16h27   #10
Membre régulier
 
Inscription : mai 2006
Messages : 60
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : mai 2006
Messages : 60
Points : 73
Points : 73
Envoyer un message via Skype™ à Tiois
Citation:
Envoyé par Defrancesco
Bingo, merci beaucoup cela marche très bien.
@+ daddy
Content d'avoir résolu ton problème !

Tiois est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h28.


 
 
 
 
Partenaires

Hébergement Web