Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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/07/2007, 23h38   #1
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 55
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 55
Points : 28
Points : 28
Par défaut [SQL] Classement par nombre de points avec la fonction array_multisort

Bonjour, je souhaite trier le code suivant par le nombre de points.
Le problème est que j'affiche le classement dynamiquement, c'est à dire avec des requetes qui dépendent du numéro du club qui est présent dans ma table tab_club. Ces différentes requetes(présentes dans "requetessql.php") servent à récupérer le nombre de points, les buts marqués, etc... de chaque équipe. Tout s'affiche parfaitement, il ne me reste plus qu'a afficher le classement par nombre de points et c'est justement pour cela que je sollicite votre aide.
Merci pour votre réponse.

Code php :
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
 
$cla = "select clu.numClub as club, clu.nomClub as equipe 
	  from tab_club clu 
	  join tab_club_champ cha 
	  on cha.numClub=clu.numClub 
	  where cha.refChamp=".$champ;
$rcla = mysql_query($cla, $connexion);
 
//afficher classement
$numero=0;
while ($ligne=mysql_fetch_array($rcla, MYSQL_ASSOC))
{
$numclub=$ligne['club'];
include "./requetessql.php";
$nbvic=$lvicDom['vicDom']+$lvicExt['vicExt'];
$nbnul=$lnulDom['nulDom']+$lnulExt['nulExt'];
$nbdef=$ldefDom['defDom']+$ldefExt['defExt'];
$nbmatchs=$nbvic+$nbnul+$nbdef;
$nbpoints=(4*$nbvic)+(2*$nbnul)+(1*$nbdef);				$bp=$lbutsDom['butsPourDom']+$lbutsExt['butsPourExt'];				$bc=$lbutsDom['butsContreDom']+$lbutsExt['butsContreExt'];
$diff=$bp-$bc;
	//Incrémenter la place
	$numero=$numero+1;
	if ($i%2==1)
	{
	echo "<table width='100%' align='center' bgcolor='".$t."'>";
        }
	else
	{
	echo "<table width='100%' align='center' bgcolor='".$t1."'>";
	}
echo "<tr>";
echo "<td width='38%' align='left'>".$numero." - ".$ligne["equipe"]."</td>";
echo "<td width='5%' align='center'>".$nbpoints."</td>";
echo "<td width='5%' align='center'>".$nbmatchs."</td>";
echo "<td width='5%' align='center'>".$nbvic."</td>";
echo "<td width='5%' align='center'>".$nbnul."</td>";
echo "<td width='5%' align='center'>".$nbdef."</td>";
echo "<td width='5%' align='center'>".$bp."</td>";
echo "<td width='5%' align='center'>".$bc."</td>";
echo "<td width='5%' align='center'>".$diff."</td>";
echo "</tr>";
$i=$i+1;
}
mayers est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2007, 01h54   #2
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
Soit tu mets un order by dans ta requete sql.
Soit tu recuperes le resultat de ta requete dans un tableau:
Code :
1
2
3
4
 
while($liste=mysql_fetch....){
 $tab[]=$ligne,
}
et ensuite tu fais un tri du tableau selon le champ en question grace a array multisort. (http://fr.php.net/manual/fr/function...-multisort.php)
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2007, 10h09   #3
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 55
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 55
Points : 28
Points : 28
Je ne comprend très bien votre réponse. En effet, ou voulez-vous que je mette l' "order by" puisque la colonne (nombre de points) sur laquelle je veux trier les données n'est pas présente dans ma requete servant à afficher le nom et le numéro des équipes. Je calcule le nombre de points pour chaque équipe en multipliant un coefficient par un la nombre de victoires, de nuls et de défaites.

Je vais tout de même tenter d'essayer votre seconde méthode ce soir, merci pour votre réponse.
mayers est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2007, 15h13   #4
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 55
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 55
Points : 28
Points : 28
proposition de solution

Code php :
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
 
$cla = "select clu.numClub as club, clu.nomClub as equipe 
	  from tab_club clu 
	  join tab_club_champ cha 
	  on cha.numClub=clu.numClub 
	  where cha.refChamp=".$champ;
$rcla = mysql_query($cla, $connexion);
//afficher classement
$numero=0;
while ($ligne=mysql_fetch_array($rcla, MYSQL_ASSOC))
{
	$numero=$numero+1;
	$numclub=$ligne['club'];
	include "./requetessql.php";
	$nbvic=$lvicDom['vicDom']+$lvicExt['vicExt'];
	$nbnul=$lnulDom['nulDom']+$lnulExt['nulExt'];
	$nbdef=$ldefDom['defDom']+$ldefExt['defExt'];
	$nbmatchs=$nbvic+$nbnul+$nbdef;
	$nbpoints=(4*$nbvic)+(2*$nbnul)+(1*$nbdef);
	$bp=$lbutsDom['butsPourDom']+$lbutsExt['butsPourExt'];		  
        $bc=$lbutsDom['butsContreDom']+$lbutsExt['butsContreExt'];
	$diff=$bp-$bc;
 
	$tab=array();
	$tab['equipe']=$ligne['equipe'];
	$tab['nbpoints']=$nbpoints;
	$tab['nbmatchs']=$nbmatchs;
	$tab['nbvic']=$nbvic;
	$tab['nbnul']=$nbnul;
	$tab['nbdef']=$nbdef;
	$tab['bp']=$bp;
	$tab['bc']=$bc;
	$tab['diff']=$diff;
 
$classement=array_multisort(
 
$tab['equipe'], sort_asc, sort_string, 
$tab['nbpoints'], sort_asc, sort_numeric, 	
$tab['nbmatchs'], sort_asc, sort_numeric,	
$tab['nbvic'], sort_asc, sort_numeric,	
$tab['nbnul'], sort_asc, sort_numeric,	
$tab['nbdef'], sort_asc, sort_numeric,	
$tab['bp'], sort_asc, sort_numeric,	
$tab['bc'], sort_asc, sort_numeric,	
$tab['diff'], sort_asc, sort_numeric);

voici une solution, cependant j'ai une erreur de array multisort lorsque que j'affiche le résultat
"Argument #1 is expected to be an array or a sort flag in..."
mayers 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 20h32.


 
 
 
 
Partenaires

Hébergement Web