IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Classement par nombre de points avec la fonction array_multisort


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 55
    Points : 46
    Points
    46
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
    }

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    Soit tu mets un order by dans ta requete sql.
    Soit tu recuperes le resultat de ta requete dans un tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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)

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    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.

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    proposition de solution

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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..."

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/03/2015, 15h20
  2. Problème : Compter un nombre de documents avec la fonction FSO
    Par Gaetan31 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/10/2014, 08h51
  3. Prise en compte du point avec la fonction cDouble
    Par shuggy dans le forum VBA Access
    Réponses: 1
    Dernier message: 17/05/2011, 10h35
  4. [MySQL] Recherche puis classement par nombre d'occurences
    Par adrien357 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/07/2007, 09h22
  5. Réponses: 3
    Dernier message: 28/10/2006, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo