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 :

trier des données issues de ma table SQL


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut trier des données issues de ma table SQL
    Bonjour a tous,


    Finalement je ne m'en sors pas alors je sollicite un peu d'aide s'il vous plait.

    Je suis en train de developper un script pour classer des crédits pour une association qui vient en aide aux personnes endettées.

    Le principe est le suivant, voici ma table de données
    Nom : table_usort.jpg
Affichages : 334
Taille : 29,7 Ko

    Voici ce que j'essai d'obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //.................................34mois .. 36mois .. 42mois .. 48mois
    //Cofidis - 5000 - 6.5% - .........180€ .....0..........0..........0....
    //sofinco - 6000 - 7.5% - .........MI_1......MI_2.......190€ ......0....
    //LCL - 7000 - 5% .................MI_3......210€ ......0..........0....
    //CETELEM - 3000 - 3%..............MI_4......MI_5.......MI_6......90€..
    //Total ...........................tot_1.......tot_2........tot_3........tot_14..
    Les MI_x sont les mensualités que je dois calculer en fonction de la durée en mois qui se trouve en tete de colonne.

    Pour cela j'ai fais pleins de tests mais je m'y suis perdu :
    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
    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
    <?php
    session_start();
    require ('conx.php');
    require ('config.php');
    require ('session.php');
     
    $client="12";
    $trian=@$_GET['trian']; 
    $_SESSION['trian']=$trian;
    if ($_SESSION['trian']>0){$sufftable=$suff_table.$trian.'_';}else{$sufftable=$suff_table;$trian=0;}
     
    $derclient = mysql_query("SELECT * FROM `".$sufftable."dem_immo_plan` where idCLIENT='$client'");
    $nbres=mysql_num_rows($derclient);
    $nb_credits = $nbres + 5; 
    $larg = 100 / ($nb_credits + 5); // 5 étant le nombre de champs avant les durées (Nombanque/Montant/TauxCrédit/TauxASS/Mensualité ASS
    // Je vais definir la taille moyenne pour chaque champ
     
    ?>
    <style> .tail { width:<?php echo $larg;?>%; float:left; } </style>
    <?php
     
    while($Dcl = mysql_fetch_array($derclient, MYSQL_ASSOC))
    {
    	$id=$Dcl['idPLAN'];
    	$plan_nombanque=$Dcl['plan_nombanque'];
    	$plan_montant=$Dcl['plan_montant'];
    	$plan_taux=$Dcl['plan_taux'];
    	$plan_duree=$Dcl['plan_duree'];
    	$plan_mens=$Dcl['plan_mens'];
    	$plan_ass_taux=$Dcl['plan_ass_taux'];
    	$plan_ass_mens=$Dcl['plan_ass_mens'];
     
    }
     
    $list_dur="0";
    while($cl_dur = mysql_fetch_array($derclient, MYSQL_ASSOC))
    {
    	$list_dur .=", ".$cl_dur['plan_duree'];
    }
    echo '$list_dur '.$list_dur.'<br>';
     
    //
    //.................................34mois .. 36mois .. 42mois .. 48mois
    //Cofidis - 5000 - 6.5% - .........180€ .....0..........0..........0....
    //sofinco - 6000 - 7.5% - .........MI_1......MI_2.......190€ ......0....
    //LCL - 7000 - 5% .................MI_3......210€ ......0..........0....
    //CETELEM - 3000 - 3%..............MI_4......MI_5.......MI_6......90€..
    //Total ...........................tot_1.......tot_2........tot_3........tot_14..
    //
     
    function cmp($a, $b)
    {
        if ($a == $b) {
            return 0;
        }
        return ($a < $b) ? -1 : 1;
    }
     
    echo '$list_dur '.$list_dur.'<br>';
     
    $a = array($list_dur); // ICI je n'ai pas le resultat attendu
     
    usort($a, "cmp");
    foreach ($a as $key => $value) {echo "$key : $value<br>";}
     
    echo '------------------------------------------------------<br>';
     
    $tot_1= 180 + $MI_1 +$MI_3 + $MI_4;
    $tot_2= 0 + $MI_2 + 210 + $MI_5;
    $tot_3= 0 + 190 + 0 + $MI_6;
    $tot_4= 0 + 0 + 0 + 90;
     
    class TestObj 
    {
        var $name;
     
        function TestObj($name)
        {
            $this->name = $name;
        }
     
        static function cmp_obj($a, $b)
        {
            $al = strtolower($a->name);
            $bl = strtolower($b->name);
            if ($al == $bl) {
                return 0;
            }
            return ($al > $bl) ? +1 : -1;
        }
    }
     
    $a[] = new TestObj($text_0);
    $a[] = new TestObj($text_1);
    $a[] = new TestObj($text_2);
    $a[] = new TestObj($text_3);
    $a[] = new TestObj($text_4);
    $a[] = new TestObj($text_5);
     
    usort($a, array("TestObj", "cmp_obj"));
     
    foreach ($a as $item) {
        echo $item->name . "<br>";
    }
    ?>
    Pardonnez moi pour toutes les incompréhensions et mélanges de codes, mais a force de faire des tests et les nuits blanches ... je ne sais plus ou j'en suis.

    Merci pour toute l'aide que vous pourrez m'apporter.
    Guillaume

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Essaie ceci. A adapter bien entendu mais le c'est le principe qui compte.
    J'ai simulé les enregistrements de la table sql par un tableau mémoire.

    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
    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
     
    <?php
    //.................................34mois .. 36mois .. 42mois .. 48mois
    //Cofidis - 5000 - 6.5% - .........180€ .....0..........0..........0....
    //sofinco - 6000 - 7.5% - .........MI_1......MI_2.......190€ ......0....
    //LCL - 7000 - 5% .................MI_3......210€ ......0..........0....
    //CETELEM - 3000 - 3%..............MI_4......MI_5.......MI_6......90€..
    $table   = array();
    $table[] = array("nom_banque"=>'Cofidis',"montant"=>5000,"taux"=>6.5,"duree"=>34,"mens"=>180);
    $table[] = array("nom_banque"=>'sofinco',"montant"=>6000,"taux"=>7.5,"duree"=>42,"mens"=>190);
    $table[]  = array("nom_banque"=>'LCL',    "montant"=>7000,"taux"=>5.0,"duree"=>36,"mens"=>210);
    $table[] = array("nom_banque"=>'CETELEM',"montant"=>3000,"taux"=>3.0,"duree"=>48,"mens"=>90);
    //---- Tableau des durées
    $durees = array();
    foreach ($table as $cle => $enregistrement)
    {
     $durees[] = $enregistrement["duree"];
    }
    sort($durees);
    //---- Durées appliquées à tous les établissement
    $durees_etab = array();
    foreach ($table as $cle => $enregistrement)
    {
     $etablissement = $enregistrement["nom_banque"];
     foreach($durees as $duree)
     {
      $durees_etab[$etablissement][$duree] = 0;
     }
    }
    ?>
    <table border="1">
     <tr>
      <td>&nbsp;</td><?php
      foreach($durees as $duree)
      {?>
       <td><?php print $duree;?></td><?php
      }?>
     </tr>
    <?php
    //---- Tableau final
    foreach ($table as $cle => $enregistrement)
    {?>
     <tr><?php
     $nom_banque = $enregistrement["nom_banque"];
     $montant    = $enregistrement["montant"];
     $taux       = $enregistrement["taux"];
     $duree2     = $enregistrement["duree"];
     $mensualite = $enregistrement["mens"];?>
     
      <td><?php print "$nom_banque - $montant - $taux %";?></td>
     <?php
     
     foreach($durees_etab[$nom_banque] as $duree =>$valeur)
     {
      if ($duree == $duree2)
      {
       $contenu = $mensualite;
      }
      else
      {
       if ($duree < $duree2)
       {
        $contenu = "a calculer";
       }
       else
       {
        $contenu = "0";
       }
      }?>
      <td><?php print $contenu ;?></td><?php
     }?>
     
     </tr><?php
    }?>
    </table>

    Donne :
    Nom : Capture20180322_001.JPG
Affichages : 319
Taille : 30,6 Ko

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut
    Merci pour cette réponse Ô combien utile,

    Par contre il faudrait que je puisse additionner toutes les mensualités de la colonne et mettre les resultats dans les totaux, or je ne pense pas que la boucle soit possible dans ce cas, voici le code que j'ai modifié et auquel j'ai rajouté l'equation de calcul dela mensualité et la requete SQL initiale.

    Merci encore pour toute l'aide possible :

    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
    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
    <?php
    session_start();
    require ('conx.php');
    require ('config.php');
    require ('session.php');
     
    $client="12";
    $trian=@$_GET['trian']; 
    $_SESSION['trian']=$trian;
    if ($_SESSION['trian']>0){$sufftable=$suff_table.$trian.'_';}else{$sufftable=$suff_table;$trian=0;}
     
    $derclient = mysql_query("SELECT * FROM `".$sufftable."dem_immo_plan` where idCLIENT='$client'");
    $nbres=mysql_num_rows($derclient);
    $nb_credits = $nbres + 5; 
    $larg = 100 / ($nb_credits + 5); // 5 étant le nombre de champs avant les durées (Nombanque/Montant/TauxCrédit/TauxASS/Mensualité ASS
     
    //.................................34mois .. 36mois .. 42mois .. 48mois
    //Cofidis - 5000 - 6.5% - .........180€ .....0..........0..........0....
    //sofinco - 6000 - 7.5% - .........MI_1......MI_2.......190€ ......0....
    //LCL - 7000 - 5% .................MI_3......210€ ......0..........0....
    //CETELEM - 3000 - 3%..............MI_4......MI_5.......MI_6......90€..
    $table   = array();
     
    while($Dcl = mysql_fetch_array($derclient, MYSQL_ASSOC))
    {
    	$id=$Dcl['idPLAN'];
    	$plan_nombanque=$Dcl['plan_nombanque'];
    	$plan_montant=$Dcl['plan_montant'];
    	$plan_taux=$Dcl['plan_taux'];
    	$plan_duree=$Dcl['plan_duree'];
    	$plan_mens=$Dcl['plan_mens'];
    	$plan_ass_taux=$Dcl['plan_ass_taux'];
    	$plan_ass_mens=$Dcl['plan_ass_mens'];
    	$table[] = array("nom_banque"=>$plan_nombanque,"montant"=>$plan_montant,"taux"=>$plan_taux,"duree"=>$plan_duree,"mens"=>$plan_mens);
    }
     
    //---- Tableau des durées
    $durees = array();
    foreach ($table as $cle => $enregistrement)
    {
     $durees[] = $enregistrement["duree"];
    }
    sort($durees);
    //---- Durées appliquées à tous les établissement
    $durees_etab = array();
    foreach ($table as $cle => $enregistrement)
    {
     $etablissement = $enregistrement["nom_banque"];
     foreach($durees as $duree)
     {
      $durees_etab[$etablissement][$duree] = 0;
     }
    }
    ?>
    <table border="1">
     <tr>
      <td>&nbsp;</td><?php
      foreach($durees as $duree)
      {?>
       <td><?php print $duree;?></td><?php
      }?>
     </tr>
    <?php
    //---- Tableau final
    foreach ($table as $cle => $enregistrement)
    {?>
     <tr><?php
     $nom_banque = $enregistrement["nom_banque"];
     $montant    = $enregistrement["montant"];
     $taux       = $enregistrement["taux"];
     $duree2     = $enregistrement["duree"];
     $mensualite = $enregistrement["mens"];?>
     
      <td style="width:200px"><?php print "$nom_banque - $montant - $taux %";?></td>
     <?php
     
     foreach($durees_etab[$nom_banque] as $duree =>$valeur)
     {
      if ($duree == $duree2)
      {
       $contenu = $mensualite;
      }
      else
      {
       if ($duree < $duree2)
       {
        $contenu = round(($montant*($taux/100)*bcpow((1+($taux/100)),$duree,2))/(bcpow((1+($taux/100)),$duree,2)-1), 2);
       }
       else
       {
        $contenu = "0";
       }
      }?>
      <td style="width:80px"><?php print $contenu ;?></td><?php
     }
     echo '</tr>';
     
    }
    ?>
    <tr>
       <td style="width:200px"><?php print "Totaux";?></td>
     <?php
     foreach($durees_etab[$nom_banque] as $duree =>$valeur)
     {
      echo '<td style="width:80px"> '.$tot_contenu_mensualite.'</td>'; /// Cumule des mensualités de la colonne
     }?>
     </tr><?php
    ?>
    </table>

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Pour calculer les totaux, c'est assez simple : tu initialises un tableau $totaux indexé par les durées à l'extérieur des boucles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $durees = array();
    foreach($table as $cle => $enregistrement) {
        $durees[] = $enregistrement["duree"];
    }
    array_unique($durees); // on dédoublonne les durées 
    sort($durees);
    // init du tableau des totaux
    $totaux = array_fill_keys($durees, 0);
    tu le complètes au fur et à mesure des calculs :

    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
    foreach($durees_etab[$nom_banque] as $duree => $valeur) {
        if ($duree == $duree2) {
            $contenu = $mensualite;
        }
        else {
            if ($duree < $duree2) {
                $contenu = round(($montant * ($taux / 100) * bcpow((1 + ($taux / 100)) , $duree, 2)) / (bcpow((1 + ($taux / 100)) , $duree, 2) - 1) , 2);
            }
            else {
                $contenu = "0";
            }
        } 
    // calcul du total
        $totaux[$duree] += $contenu;
        ?>
        <td style="width:80px"><?php print $contenu; ?></td><?php
    }
    et tu l'affiches en dernière ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <tr>
       <td style="width:200px"><?php print "Totaux"; ?></td>
    	<?php
    	foreach($totaux as $duree => $total) {
    		echo '<td style="width:80px"> ' . $total . '</td>'; /// Cumule des mensualités de la colonne
    	} ?>
    </tr>
    Par contre, je ne vois pas bien le rapport avec le titre de la discussion "Utilisation de usort"
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut
    Bonjour Celira et merci pour ton aide,

    Si je résume ce que tu me dis cela me renvoi un résultat de 0 dans toutes les colonnes totaux .

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    ça te renvoie 0 ? Je peux voir ton nouveau code ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/03/2014, 12h02
  2. [MySQL] Intercallage et affichage avec des données issues de plusieurs tables SQL
    Par vinceom92 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 02/03/2014, 14h37
  3. filtre pour trier des données
    Par glasgow dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 10/08/2009, 09h30
  4. Trier des données issues d'une formule
    Par jarault dans le forum Excel
    Réponses: 5
    Dernier message: 09/04/2008, 21h53
  5. Réponses: 3
    Dernier message: 05/05/2006, 11h41

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