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

Langage PHP Discussion :

Faire un tri total [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Etudiant(IUT info)/Stagiaire
    Inscrit en
    Mai 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant(IUT info)/Stagiaire

    Informations forums :
    Inscription : Mai 2013
    Messages : 49
    Points : 47
    Points
    47
    Par défaut Faire un tri total
    Bonjour à toutes et à tous !

    Pour le contexte, je suis en 2ème année d'IUT info, et je suis en stage de fin d'année.

    Je vais y aller au but, j'aimerai faire un tri en fonction des % en mettant a jour les autres colonnes de mon affichage (Cf. pièce jointe). Je ne vois pas du tout comment je pourrais m'y prendre avec les outils que j'ai regardés (notamment arsort() ).

    J'ai bien conscience que je devrais très certainement changer la structure de mon code.
    Je vous fournis ici le code résultant a ce traitement. (J'ai volontairement caché les questions, pour la confidentialité). J'ai aussi enlevé les requetes, qui ne sont pas importantes dans ce code, ce qui le rendra plus leger.
    Code : 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
    46
    47
    48
    49
    50
    51
    52
    <?php
     
    	$cptFaux=array();
    	$cptTot=array();
    	$malRep=array();
     
     
    	while ($row =  mysqli_fetch_assoc($resuCount))
    	{
    		$cptFaux[] = $row['Enonce_Question'];
    	}
     
    	foreach (array_count_values($cptFaux) as $nbMalRep)
    	{
    		$malRep[] = $nbMalRep;
    	}
     
    	while ($row = mysqli_fetch_assoc($resuTotal))
    	{
    		$cptTot[] = $row['Enonce_Question'];
    	}
    	foreach (array_count_values($cptTot) as $nbTotRep)
    	{
    		$totRep[] = $nbTotRep;
    	}
     
    	$i=0;
    	$pC=0;
    ?>
    	<table border="2" align="center" bgcolor = #E0FFFF>
    	<tr>
    		<td> Enonce de la question </td>
    		<td> Nombre de mauvaise reponse </td>
    		<td> Nombre total de réponse </td>
    		<td> % </td>
    	</tr>
    <?php
    	while ($row =  mysqli_fetch_assoc($resuAff))
    	{
    	$pC = ( $malRep[$i] / $totRep[$i] )* 100;
    ?>
    		<tr>
    			<td><?php echo $row['Enonce_Question'];?></td>
    			<td><?php echo $malRep[$i];?></td>
    			<td><?php echo $totRep[$i];?></td>
    			<td><?php echo $pC." %"; ?></td>
    		</tr>
    <?php
    		$i++;
    	}
    ?>
    	</table>
    Il y a de forte chance que mon code soit très sale, et je suis preneur de toutes les remarques, cela me permettrai d'avancer.

    Je vous remercie des pistes que vous pouvez m'apporter ainsi que vos solutions proposées (avec des explications, pour que je sois capable de refaire les traitements). Je vous remercie aussi d'avance d'accorder du temps à mon problème.

    Cordialement
    Images attachées Images attachées  

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    C'est pas crade du tout (a part le css dans le th).

    peut etre une idée avec un ksort en sortant $pC = ( $malRep[$i] / $totRep[$i] )* 100; de ta boucle while.

    Parcontre, si tu tries hors sql, nécéssairement ta boucle d'affichage ne seras pas sur le mysqli_fetch_assoc

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    pourquoi as-tu morcelé autant le traitement (à voir avec l'autre question concernant le array_count_values() ?)

    Ne pourrais-tu pas récupérer en une passe les questions et les réponses et sortir tes stats plus facilement ?

    Montre comment sont organisées tes tables entre les questions et les réponses.

  4. #4
    Membre du Club
    Homme Profil pro
    Etudiant(IUT info)/Stagiaire
    Inscrit en
    Mai 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant(IUT info)/Stagiaire

    Informations forums :
    Inscription : Mai 2013
    Messages : 49
    Points : 47
    Points
    47
    Par défaut
    @Gototog : Pour le css c'est juste pour ne pas m'eclater les yeux en lisant le tableau, ca sauteras avec toute la partie graphique ^^
    Ok pour le ksort, je vais voir ce que sa donne.

    @rawsrc : Je le fais morceau par morceau car, d'une part, si je merde quelque part, je sais de suite ou c'est, d'autre part, s'est ce qui m'a parut le plus naturel et le plus simple pour faire ce que j'avais besoin. Malheureusment, je ne crois pas que je puisse le faire, car les requetes sont bien différentes l'une de l'autre. De plus, ces requêtes seront effectuée avec les variables d'un formulaire, donc, pour le moment, dans ma tête c'est plus simple de morcelé ainsi.


    Pour ce qui est de mes tables, la table "question" ne contient que les questions ainsi que leur page. La table "trace" est plus complexe. Elle indique qu'elle réponse a choisit le candidat en fonction de la question, et si elle était juste ou non. Elle contient d'autre info que je n'ai pas encore utiliés.

    Les requetes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $queryCount = "SELECT Enonce_Question FROM question q, trace t WHERE q.Code_Page = t.Code_Page AND Resultat_Reponse LIKE 'incorrect%'";
     
     
    $queryTotal = "SELECT Enonce_Question FROM question q, trace t WHERE q.Code_Page = t.Code_Page AND Enonce_Question in
    			(SELECT Enonce_Question FROM question q, trace t WHERE q.Code_Page = t.Code_Page AND Resultat_Reponse LIKE 'incorrect%')";
     
    $queryAff = "SELECT DISTINCT Enonce_Question FROM question q, trace t WHERE q.Code_Page = t.Code_Page AND Resultat_Reponse LIKE 'incorrect%'";
    Il se peut que les requêtes soient optimisables (j'étais pas le plus serieux en cours de BD a l'iut ) mais au moins celles-ci marchent comme je l'attendais.
    A savoir aussi, je devrais utiliser ces différents résultats dans des graph (Via la librairie JpGraph).

    J'espere que j'ai répondu à vos questions, ca eviterais de perdre du temps pour ca.

    EDIT : Dois-je passer par une tableau multi-dimensionnel ? Et voir avec multisort ?
    Images attachées Images attachées   

  5. #5
    Membre du Club
    Homme Profil pro
    Etudiant(IUT info)/Stagiaire
    Inscrit en
    Mai 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant(IUT info)/Stagiaire

    Informations forums :
    Inscription : Mai 2013
    Messages : 49
    Points : 47
    Points
    47
    Par défaut
    Bon, désolé du double post, mais bon....
    J'ai réussis à trouver comment faire ! C'est en cherchant avec le ksort, que je suis tombé sur ma fonction magique . Bon par contre, j'ai pété mon affichage en tableau, mais au moins, j'ai tout trié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $pC[] = ( $malRep[$i] / $totRep[$i] )* 100;
    		$data[] = array ('enonceQuestion' => $row['Enonce_Question'], 'malRep' => $malRep[$i], 'totRep' => $totRep[$i], 'pC' => $pC[$i]);
    		$i++;
    	}
    	foreach($data as $key => $list)
    	{
    		$enonceQuestion[$key] = $list['enonceQuestion'];
    		$malRep[$key] = $list['malRep'];
    		$totRep[$key] = $list['totRep'];
    		$pC[$key] = $list['pC'];
    	}
    	array_multisort($pC, SORT_DESC,$enonceQuestion,SORT_DESC,$malRep,SORT_DESC,$totRep,SORT_DESC,$data);
    Merci d'avoir accordé du temps à ce post. Je ne le met pas en résolu tant que mon affichage ne marche pas correctement, d'autres solutions existent surement;
    Encore merci en tout cas

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

Discussions similaires

  1. déclaratiion des dossiersen c et faire le tri de ces dossiers
    Par Le Lion dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 30/06/2006, 17h06
  2. [VBA-E]Faire un tri sans activer la feuille
    Par Lahax dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/05/2006, 12h05
  3. [XPATH] XPath dû mal de faire le tri des API
    Par tralloc dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 27/04/2006, 00h07
  4. Faire un tri avant un group by
    Par Igarpoor dans le forum Requêtes
    Réponses: 10
    Dernier message: 17/03/2006, 15h27
  5. Comment faire le tri d'un array of array ?
    Par Tchouffy dans le forum Langage
    Réponses: 1
    Dernier message: 16/06/2005, 20h55

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