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 :

Script de classement d'alliances


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Par défaut Script de classement d'alliances
    Bonjour, je suis en train de coder un jeu, avec un systeme d'alliances. Je voudrais afficher un classement des différentes alliances, et je me retrouve confronté a un léger probleme ^^

    J'ai dans ma base de donnée une table "Alliances" avec 3 champs : id_alliance, nom, et membres. Le champ id_alliance contient un numéro d'identification de l'alliance, le champ nom contient le nom, et le champ membres contient le nombre de membres.

    Dans la table "Users", j'ai un champ login, un champ points, un champ adresse, un champ alliance, et un champ mot_de_passe. Le champ alliance contient le numéro de l'alliance dans lequel le joueur est, ou est vide si le joueur est indépendant.


    Pour le classement, je selectionne tous les joueurs dont l'alliance est de tel numéro, et j'additionne le total des points. Je classe ensuite ces valeurs, et affiche en conséquence.

    Le problème que j'ai : toutes les alliances avec le meme nombre de points apparaissent autant de fois qu'il y a d'alliances a ce nombre de points la

    Exemple :
    Pos. Nom Points Membres (pourcentage total)

    4. Kenshen 0 0 (0%)
    4. Owe 0 0 (0%)
    4. Nilerben 0 0 (0%)
    5. Kenshen 0 0 (0%)
    5. Owe 0 0 (0%)
    5. Nilerben 0 0 (0%)
    6. Kenshen 0 0 (0%)
    6. Owe 0 0 (0%)
    6. Nilerben 0 0 (0%)

    Est-ce que quelqu'un aurait une idée pour corriger ce problème ?

    Merci.

  2. #2
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    Tu devrais poster tes requêtes, c'est probablement là qu'il y a un problème.

    --
    Rakken

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Par défaut
    Non, j'ai vérifié, les requetes sont bonnes. Voila le script :

    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
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    <?
     
     
    $query = "SELECT * FROM users WHERE alliance = 'alliance1'";
     
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
     
    $total_alliance1 = "0";
     
    while ($data = mysql_fetch_array($result))
    {
    $total_alliance1 = $total_alliance1 + $data['points'];
    }
     
    $query = "SELECT * FROM users WHERE alliance = 'alliance2'";
     
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
     
    $total_alliance2 = "0";
     
    while ($data = mysql_fetch_array($result))
    {
    $total_alliance2 = $total_alliance2 + $data['points'];
    }
     
    $query = "SELECT * FROM users WHERE alliance = 'alliance3'";
     
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
     
    $total_alliance3 = "0";
     
    while ($data = mysql_fetch_array($result))
    {
    $total_alliance3 = $total_alliance3 + $data['points'];
    }
     
    $query = "SELECT * FROM users WHERE alliance = 'alliance4'";
     
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
     
    $total_alliance4 = "0";
     
    while ($data = mysql_fetch_array($result))
    {
    $total_alliance4 = $total_alliance4 + $data['points'];
    }
     
    $query = "SELECT * FROM users WHERE alliance = 'alliance5'";
     
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
     
    $total_alliance5 = "0";
     
    while ($data = mysql_fetch_array($result))
    {
    $total_alliance5 = $total_alliance5 + $data['points'];
    }
     
    $query = "SELECT * FROM users WHERE alliance = ''";
     
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
     
    $total_alliance6 = "0";
     
    while ($data = mysql_fetch_array($result))
    {
    $total_alliance6 = $total_alliance6 + $data['points'];
    }
     
    $alliances = array($total_alliance1, $total_alliance2, $total_alliance3, $total_alliance4, $total_alliance5, $total_alliance6);
    sort($alliances);
    arsort($alliances);
    $alliances2 = array_values($alliances);
     
    $query = "SELECT * FROM alliances WHERE id_alliance = '1'";
     
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
    $table_alliance_1 = mysql_fetch_array($result);
     
    $query = "SELECT * FROM alliances WHERE id_alliance = '2'";
     
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
    $table_alliance_2 = mysql_fetch_array($result);
     
    $query = "SELECT * FROM alliances WHERE id_alliance = '3'";
     
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
    $table_alliance_3 = mysql_fetch_array($result);
     
    $query = "SELECT * FROM alliances WHERE id_alliance = '4'";
     
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
    $table_alliance_4 = mysql_fetch_array($result);
     
    $query = "SELECT * FROM alliances WHERE id_alliance = '5'";
     
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
    $table_alliance_5 = mysql_fetch_array($result);
     
    $query = "SELECT * FROM users";
     
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
    $nbre_membres = mysql_num_rows($result);
     
    $query = "SELECT * FROM users WHERE alliance = ''";
     
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
    $nbre_membres_indep = mysql_num_rows($result);
     
    $pctally1 = round($table_alliance_1['membres'] / $nbre_membres * 100);
    $pctally2 = round($table_alliance_2['membres'] / $nbre_membres * 100);
    $pctally3 = round($table_alliance_3['membres'] / $nbre_membres * 100);
    $pctally4 = round($table_alliance_4['membres'] / $nbre_membres * 100);
    $pctally5 = round($table_alliance_5['membres'] / $nbre_membres * 100);
    $pctindep = round($nbre_membres_indep / $nbre_membres * 100);
     
     
    ?>
    <table class="bouton">
    <tr class="bouton"><th class="bouton">Pos.</th><th class="bouton">Alliance</th><th class="bouton">Points</th><th class="bouton">Membres</th></tr>
    <?
    if ($alliances2[0] == $total_alliance1)
    {
    ?>
    <tr class="bouton"><td class="bouton">1.</td><td class="bouton"><? echo $table_alliance_1['nom']; ?></td><td class="bouton"><? echo floor($alliances2[0]); ?></td><td class="bouton"><? echo $table_alliance_1['membres']; ?> (<?echo $pctally1; ?>%)</td></tr>
    <?
    }
    if ($alliances2[0] == $total_alliance2)
    {
    ?>
    <tr class="bouton"><td class="bouton">1.</td><td class="bouton"><? echo $table_alliance_2['nom']; ?></td><td class="bouton"><? echo floor($alliances2[0]); ?></td><td class="bouton"><? echo $table_alliance_2['membres']; ?> (<?echo $pctally2; ?>%)</td></tr>
    <?
    }
    if ($alliances2[0] == $total_alliance3)
    {
    ?>
    <tr class="bouton"><td class="bouton">1.</td><td class="bouton"><? echo $table_alliance_3['nom']; ?></td><td class="bouton"><? echo floor($alliances2[0]); ?></td><td class="bouton"><? echo $table_alliance_3['membres']; ?> (<?echo $pctally3; ?>%)</td></tr>
    <?
    }
    if ($alliances2[0] == $total_alliance4)
    {
    ?>
    <tr class="bouton"><td class="bouton">1.</td><td class="bouton"><? echo $table_alliance_4['nom']; ?></td><td class="bouton"><? echo floor($alliances2[0]); ?></td><td class="bouton"><? echo $table_alliance_4['membres']; ?> (<?echo $pctally4; ?>%)</td></tr>
    <?
    }
    if ($alliances2[0] == $total_alliance5)
    {
    ?>
    <tr class="bouton"><td class="bouton">1.</td><td class="bouton"><? echo $table_alliance_5['nom']; ?></td><td class="bouton"><? echo floor($alliances2[0]); ?></td><td class="bouton"><? echo $table_alliance_5['membres']; ?> (<?echo $pctally5; ?>%)</td></tr>
    <?
    }
    if ($alliances2[0] == $total_alliance6)
    {
    ?>
    <tr class="bouton"><td class="bouton">1.</td><td class="bouton">Indépendants</td><td class="bouton"><? echo floor($alliances2[0]); ?></td><td class="bouton"><? echo $nbre_membres_indep; ?> (<?echo $pctindep; ?>%)</td></tr>
    <?
    }
    if ($alliances2[1] == $total_alliance1)
    {
    ?>
    <tr class="bouton"><td class="bouton">2.</td><td class="bouton"><? echo $table_alliance_1['nom']; ?></td><td class="bouton"><? echo floor($alliances2[1]); ?></td><td class="bouton"><? echo $table_alliance_1['membres']; ?> (<?echo $pctally1; ?>%)</td></tr>
    <?
    }
    if ($alliances2[1] == $total_alliance2)
    {
    ?>
    <tr class="bouton"><td class="bouton">2.</td><td class="bouton"><? echo $table_alliance_2['nom']; ?></td><td class="bouton"><? echo floor($alliances2[1]); ?></td><td class="bouton"><? echo $table_alliance_2['membres']; ?> (<?echo $pctally2; ?>%)</td></tr>
    <?
    }
    if ($alliances2[1] == $total_alliance3)
    {
    ?>
    <tr class="bouton"><td class="bouton">2.</td><td class="bouton"><? echo $table_alliance_3['nom']; ?></td><td class="bouton"><? echo floor($alliances2[1]); ?></td><td class="bouton"><? echo $table_alliance_3['membres']; ?> (<?echo $pctally3; ?>%)</td></tr>
    <?
    }
    if ($alliances2[1] == $total_alliance4)
    {
    ?>
    <tr class="bouton"><td class="bouton">2.</td><td class="bouton"><? echo $table_alliance_4['nom']; ?></td><td class="bouton"><? echo floor($alliances2[1]); ?></td><td class="bouton"><? echo $table_alliance_4['membres']; ?> (<?echo $pctally4; ?>%)</td></tr>
    <?
    }
    if ($alliances2[1] == $total_alliance5)
    {
    ?>
    <tr class="bouton"><td class="bouton">2.</td><td class="bouton"><? echo $table_alliance_5['nom']; ?></td><td class="bouton"><? echo floor($alliances2[1]); ?></td><td class="bouton"><? echo $table_alliance_5['membres']; ?> (<?echo $pctally5; ?>%)</td></tr>
    <?
    }
    if ($alliances2[1] == $total_alliance6)
    {
    ?>
    <tr class="bouton"><td class="bouton">2.</td><td class="bouton">Indépendants</td><td class="bouton"><? echo floor($alliances2[1]); ?></td><td class="bouton"><? echo $nbre_membres_indep; ?> (<?echo $pctindep; ?>%)</td></tr>
    <?
    }
    if ($alliances2[2] == $total_alliance1)
    {
    ?>
    <tr class="bouton"><td class="bouton">3.</td><td class="bouton"><? echo $table_alliance_1['nom']; ?></td><td class="bouton"><? echo floor($alliances2[2]); ?></td><td class="bouton"><? echo $table_alliance_1['membres']; ?> (<?echo $pctally1; ?>%)</td></tr>
    <?
    }
    if ($alliances2[2] == $total_alliance2)
    {
    ?>
    <tr class="bouton"><td class="bouton">3.</td><td class="bouton"><? echo $table_alliance_2['nom']; ?></td><td class="bouton"><? echo floor($alliances2[2]); ?></td><td class="bouton"><? echo $table_alliance_2['membres']; ?> (<?echo $pctally2; ?>%)</td></tr>
    <?
    }
    if ($alliances2[2] == $total_alliance3)
    {
    ?>
    <tr class="bouton"><td class="bouton">3.</td><td class="bouton"><? echo $table_alliance_3['nom']; ?></td><td class="bouton"><? echo floor($alliances2[2]); ?></td><td class="bouton"><? echo $table_alliance_3['membres']; ?> (<?echo $pctally3; ?>%)</td></tr>
    <?
    }
    if ($alliances2[2] == $total_alliance4)
    {
    ?>
    <tr class="bouton"><td class="bouton">3.</td><td class="bouton"><? echo $table_alliance_4['nom']; ?></td><td class="bouton"><? echo floor($alliances2[2]); ?></td><td class="bouton"><? echo $table_alliance_4['membres']; ?> (<?echo $pctally4; ?>%)</td></tr>
    <?
    }
    if ($alliances2[2] == $total_alliance5)
    {
    ?>
    <tr class="bouton"><td class="bouton">3.</td><td class="bouton"><? echo $table_alliance_5['nom']; ?></td><td class="bouton"><? echo floor($alliances2[2]); ?></td><td class="bouton"><? echo $table_alliance_5['membres']; ?> (<?echo $pctally5; ?>%)</td></tr>
    <?
    }
    if ($alliances2[2] == $total_alliance6)
    {
    ?>
    <tr class="bouton"><td class="bouton">3.</td><td class="bouton">Indépendants</td><td class="bouton"><? echo floor($alliances2[2]); ?></td><td class="bouton"><? echo $nbre_membres_indep; ?> (<?echo $pctindep; ?>%)</td></tr>
    <?
    }
    if ($alliances2[3] == $total_alliance1)
    {
    ?>
    <tr class="bouton"><td class="bouton">4.</td><td class="bouton"><? echo $table_alliance_1['nom']; ?></td><td class="bouton"><? echo floor($alliances2[3]); ?></td><td class="bouton"><? echo $table_alliance_1['membres']; ?> (<?echo $pctally1; ?>%)</td></tr>
    <?
    }
    if ($alliances2[3] == $total_alliance2)
    {
    ?>
    <tr class="bouton"><td class="bouton">4.</td><td class="bouton"><? echo $table_alliance_2['nom']; ?></td><td class="bouton"><? echo floor($alliances2[3]); ?></td><td class="bouton"><? echo $table_alliance_2['membres']; ?> (<?echo $pctally2; ?>%)</td></tr>
    <?
    }
    if ($alliances2[3] == $total_alliance3)
    {
    ?>
    <tr class="bouton"><td class="bouton">4.</td><td class="bouton"><? echo $table_alliance_3['nom']; ?></td><td class="bouton"><? echo floor($alliances2[3]); ?></td><td class="bouton"><? echo $table_alliance_3['membres']; ?> (<?echo $pctally3; ?>%)</td></tr>
    <?
    }
    if ($alliances2[3] == $total_alliance4)
    {
    ?>
    <tr class="bouton"><td class="bouton">4.</td><td class="bouton"><? echo $table_alliance_4['nom']; ?></td><td class="bouton"><? echo floor($alliances2[3]); ?></td><td class="bouton"><? echo $table_alliance_4['membres']; ?> (<?echo $pctally4; ?>%)</td></tr>
    <?
    }
    if ($alliances2[3] == $total_alliance5)
    {
    ?>
    <tr class="bouton"><td class="bouton">4.</td><td class="bouton"><? echo $table_alliance_5['nom']; ?></td><td class="bouton"><? echo floor($alliances2[3]); ?></td><td class="bouton"><? echo $table_alliance_5['membres']; ?> (<?echo $pctally5; ?>%)</td></tr>
    <?
    }
    if ($alliances2[3] == $total_alliance6)
    {
    ?>
    <tr class="bouton"><td class="bouton">4.</td><td class="bouton">Indépendants</td><td class="bouton"><? echo floor($alliances2[3]); ?></td><td class="bouton"><? echo $nbre_membres_indep; ?> (<?echo $pctindep; ?>%)</td></tr>
    <?
    }
    if ($alliances2[4] == $total_alliance1)
    {
    ?>
    <tr class="bouton"><td class="bouton">5.</td><td class="bouton"><? echo $table_alliance_1['nom']; ?></td><td class="bouton"><? echo floor($alliances2[4]); ?></td><td class="bouton"><? echo $table_alliance_1['membres']; ?> (<?echo $pctally1; ?>%)</td></tr>
    <?
    }
    if ($alliances2[4] == $total_alliance2)
    {
    ?>
    <tr class="bouton"><td class="bouton">5.</td><td class="bouton"><? echo $table_alliance_2['nom']; ?></td><td class="bouton"><? echo floor($alliances2[4]); ?></td><td class="bouton"><? echo $table_alliance_2['membres']; ?> (<?echo $pctally2; ?>%)</td></tr>
    <?
    }
    if ($alliances2[4] == $total_alliance3)
    {
    ?>
    <tr class="bouton"><td class="bouton">5.</td><td class="bouton"><? echo $table_alliance_3['nom']; ?></td><td class="bouton"><? echo floor($alliances2[4]); ?></td><td class="bouton"><? echo $table_alliance_3['membres']; ?> (<?echo $pctally3; ?>%)</td></tr>
    <?
    }
    if ($alliances2[4] == $total_alliance4)
    {
    ?>
    <tr class="bouton"><td class="bouton">5.</td><td class="bouton"><? echo $table_alliance_4['nom']; ?></td><td class="bouton"><? echo floor($alliances2[4]); ?></td><td class="bouton"><? echo $table_alliance_4['membres']; ?> (<?echo $pctally4; ?>%)</td></tr>
    <?
    }
    if ($alliances2[4] == $total_alliance5)
    {
    ?>
    <tr class="bouton"><td class="bouton">5.</td><td class="bouton"><? echo $table_alliance_5['nom']; ?></td><td class="bouton"><? echo floor($alliances2[4]); ?></td><td class="bouton"><? echo $table_alliance_5['membres']; ?> (<?echo $pctally5; ?>%)</td></tr>
    <?
    }
    if ($alliances2[4] == $total_alliance6)
    {
    ?>
    <tr class="bouton"><td class="bouton">5.</td><td class="bouton">Indépendants</td><td class="bouton"><? echo floor($alliances2[4]); ?></td><td class="bouton"><? echo $nbre_membres_indep; ?> (<?echo $pctindep; ?>%)</td></tr>
    <?
    }
    if ($alliances2[5] == $total_alliance1)
    {
    ?>
    <tr class="bouton"><td class="bouton">6.</td><td class="bouton"><? echo $table_alliance_1['nom']; ?></td><td class="bouton"><? echo floor($alliances2[5]); ?></td><td class="bouton"><? echo $table_alliance_1['membres']; ?> (<?echo $pctally1; ?>%)</td></tr>
    <?
    }
    if ($alliances2[5] == $total_alliance2)
    {
    ?>
    <tr class="bouton"><td class="bouton">6.</td><td class="bouton"><? echo $table_alliance_2['nom']; ?></td><td class="bouton"><? echo floor($alliances2[5]); ?></td><td class="bouton"><? echo $table_alliance_2['membres']; ?> (<?echo $pctally2; ?>%)</td></tr>
    <?
    }
    if ($alliances2[5] == $total_alliance3)
    {
    ?>
    <tr class="bouton"><td class="bouton">6.</td><td class="bouton"><? echo $table_alliance_3['nom']; ?></td><td class="bouton"><? echo floor($alliances2[5]); ?></td><td class="bouton"><? echo $table_alliance_3['membres']; ?> (<?echo $pctally3; ?>%)</td></tr>
    <?
    }
    if ($alliances2[5] == $total_alliance4)
    {
    ?>
    <tr class="bouton"><td class="bouton">6.</td><td class="bouton"><? echo $table_alliance_4['nom']; ?></td><td class="bouton"><? echo floor($alliances2[5]); ?></td><td class="bouton"><? echo $table_alliance_4['membres']; ?> (<?echo $pctally4; ?>%)</td></tr>
    <?
    }
    if ($alliances2[5] == $total_alliance5)
    {
    ?>
    <tr class="bouton"><td class="bouton">6.</td><td class="bouton"><? echo $table_alliance_5['nom']; ?></td><td class="bouton"><? echo floor($alliances2[5]); ?></td><td class="bouton"><? echo $table_alliance_5['membres']; ?> (<?echo $pctally5; ?>%)</td></tr>
    <?
    }
    if ($alliances2[5] == $total_alliance6)
    {
    ?>
    <tr class="bouton"><td class="bouton">6.</td><td class="bouton">Indépendants</td><td class="bouton"><? echo floor($alliances2[5]); ?></td><td class="bouton"><? echo $nbre_membres_indep; ?> (<?echo $pctindep; ?>%)</td></tr>
    <?
    }
    ?>

    C'est peut-etre un peu long, mais très répétitif

  4. #4
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Oh oui, c'est long et répétitif...
    Tu pourrais peut-être améliorer les accès bd avec du GROUP BY alliance et du SUM(points) placés judicieusement qui pourraient ramener les données voulues en une seule requête.

    Il y a aussi moyen de repenser la "deuxième partie" de test avec un tableau correctement indicé parcouru par un foreach.

    Parce que là, c'est un peu chercher une aiguille dans une botte de foin...

  5. #5
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    Je n'ai fait que survoler ton code qui est effectivement très répétitif. Tu sembles faire exactement le même traitement pour chacune des 5 alliances + un traitement pour les indépendants. Et pour chacune des 5 alliances, le code est dupliqué.
    J'pense que sans trop se prendre la tête, ce serai franchement malin de factoriser le code.

    Ceci étant dit, tout a la fin, ton enchainement de td qui affiche des trucs, j'pense que ton soucis se trouve par là. T'as l'air de recopier vraiment beaucoup de chose, il suffit que tu ais foiré un if, pour avoir des doublons.

    Mais tu devrais vraiment utiliser des whiles plutot que de tout recopier. Ca allégerai enormément ton code, en le rendant beaucoup plus comprehensible et facile a maintenir (genre imagine le boulot pour rajouter une alliance...).

    --
    Rakken

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Par défaut
    Citation Envoyé par Rakken
    Ceci étant dit, tout a la fin, ton enchainement de td qui affiche des trucs, j'pense que ton soucis se trouve par là. T'as l'air de recopier vraiment beaucoup de chose, il suffit que tu ais foiré un if, pour avoir des doublons.

    Mon soucis vient du fait que quand les alliances ont des totaux de points différents, il n'y a pas de doublons :X


    Citation Envoyé par jml94
    Tu pourrais peut-être améliorer les accès bd avec du GROUP BY alliance et du SUM(points) placés judicieusement qui pourraient ramener les données voulues en une seule requête.
    Pourrais tu etre plus clair ? je ne connais ni la fonction GROUP BY ni SUM :X

    Merci beaucoup

  7. #7
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Pas de problème, mais comme ça demande un minimum de concentration, je mate ça ce soir.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Par défaut
    Merci

  9. #9
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Salut et désolé, j'ai pas fait grand chose hier soir, je vais donc essayer de te donner une requête sans pouvoir tester.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT alliance, SUM(points)
    FROM users
    GROUP BY alliance;
    Le GROUP BY lui spécifie d'agréger les données par alliance.
    En l'occurence, nous nous intéressons aux points et lui spécifions le type d'agrégation SUM qui fait la somme des points par alliance.
    Je crois que c'est ce que tu recherche pour la première partie.

    Il ya d'autres agrégations possibles : MIN, MAX, moyenne, etc...

    Si ma requête n'est pas fonctionnelle (c'est fort possible), je pense que tu peux aller te renseigner sur le forum MySQL où tu trouveras toutes les compétences nécessaires pour atteindre ton but.

    Comme nous avons été plusieurs à te le conseiller plus haut, je pense que tu dois automatiser ton code (factoriser, comme dit si bien Rakken) afin de générer toujours le même code, ce qui te permets une correction et une maintenance beaucoup plus efficace.

    Ainsi, en deuxième partie, tu tireras avantage d'une requête unique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM alliances GROUP BY id_alliance
    qui te permettra d'obtenir le résultat pour chaque id_alliance en une seule fois. Au niveau performances, cerise sur le gâteau, c'est carrément mieux. Le groupement demande un peu plus de temps machine, mais tu n'as plus à ouvrir plusieurs fois la même connexion, ce qui compense largement.

    Enfin, pour la troisième partie, à savoir l'affichage html, tu dois aussi pouvoir trouver une boucle qui te génère tes lignes à la volée.

    Bon courage, tiens nous au courant.

    JM

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Par défaut
    Merci beaucoup, je ne connaissais pas la fonction GROUP BY, je vais tester ca dessuite


    Edit : pas trop le temps maintenant, je te dis si ca marche d'ici ce soir

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Par défaut
    Petite question : je récupère les résultats de la première requête comment ? :X

    Edit : J'ai trouvé

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Par défaut
    Me reste un petit probleme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $query = "SELECT alliance, SUM(points) FROM users GROUP BY alliance";
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
    while ($test_sum = mysql_fetch_array($result))
    {
    print_r ($test_sum);
    print ("<br><br>");
    }
    Ca donne :

    Array ( [0] => [alliance] => [1] => 96830.5014935175 [SUM(points)] => 96830.5014935175 )

    Array ( [0] => alliance1 [alliance] => alliance1 [1] => 23994.2461024092 [SUM(points)] => 23994.2461024092 )

    Array ( [0] => alliance4 [alliance] => alliance4 [1] => 235.936542874 [SUM(points)] => 235.936542874 )

    Array ( [0] => alliance5 [alliance] => alliance5 [1] => 51320.8711146 [SUM(points)] => 51320.8711146 )
    1ere ligne, pas de soucis, c'est bien ceux qui n'ont pas d'alliances. 2eme ligne, ceux qui sont dans la 1ere alliance. 3eme ligne, ceux qui sont dans la 4eme alliance. Ok, mais... Ou sont passés ceux des alliances 2 et 3 ? Ok il n'y a personne la dedans, mais il n'y a pas de solution pour afficher des valeurs égales a 0 ?


    Edit : J'en aurais besoin, car je voudrais faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $query = "SELECT alliance, SUM(points) FROM users GROUP BY alliance";
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
    while ($test_sum = mysql_fetch_array($result))
    $i = 0;
    {
    ${"alliance".$i} = $test_sum;
    $i++;
    }
    Sauf que je me retrouverais avec les statistiques de l'alliance 4 pour la 2...

  13. #13
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    Tu lis dans la table "user" tes alliances.
    Si tu n'a pas d'utilisateurs qui ont la valeur "alliance3" dans leurs champ "alliance", le programme n'a aucun moyen de "savoir" que l'alliance3 existe.

    Ca n'est pas une valeur egale a 0, c'est une valeur qui n'existe pas du tout.
    Pourquoi le programme afficherai "alliance3" et pas.. je sais pas ... "tartampion" ?
    Il n'y a pas non plus de joueur dans l'alliance tartampion.

    Si tu veux vraiment avoir "alliance3" qui apparait, tu peux toujours creer un joueur "fictif". C'est pas super propre, mais c'est rapide à faire et ca marche a coup sûr.

    Sinon, tu peux aussi faire un test sur l'alliance courrante, si tu es sûr que les noms d'alliances sont toujours de la forme "alliance".$i

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $i = 0;
    while ($test_sum = mysql_fetch_array($result)) {
      while ($test_sum['alliance'] != 'alliance'.$i && $i != 0) {
        ${"alliance".$i} = null;
        $i++;
      }
       ${"alliance".$i} = $test_sum;
      $i++;
    }
    --
    Rakken

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Par défaut
    Pas bete, je vais utiliser cette méthode merci

    Edit : Ok plus que un p'tit truc a rajouter, ce script ne prenant pas en compte les indéps

    Re-Edit : en fait c'est moi qui sait pas lire

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Par défaut
    Citation Envoyé par jml94
    Il y a aussi moyen de repenser la "deuxième partie" de test avec un tableau correctement indicé parcouru par un foreach.

    Quelqu'un pourrait m'expliquer comment faire svp ? Parce que la j'suis vraiment coincé...

  16. #16
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Salut,

    Bon du coup, c'est plus du SQL. Pas grave...

    Par deuxième partie, j'entendais l'alimentation du code html à partir de tes données en base.

    Les solutions sont multiples, mais tu as déjà une belle boucle while qui peut faire le boulot. Il suffit d'y inclure ton code html.

    Mais avant d'aller plus loin, quelle solution as-tu prise pour tes alliances "vides" ?

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Par défaut
    Pour les alliances vides, j'ai fait ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $i = 0;
    while ($test_sum = mysql_fetch_array($result))
    {
    while ($test_sum['alliance'] != 'alliance'.$i && $i != 0) {
        ${"alliance".$i} = null;
        $i++;
      }
       ${"alliance".$i} = $test_sum;
      $i++;
    }

    Encore merci

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Par défaut
    Personne ? :X

Discussions similaires

  1. [OL-2010] Script de classement des règles par ordre alphabétique
    Par gabzh dans le forum VBA Outlook
    Réponses: 10
    Dernier message: 29/06/2021, 11h13
  2. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  3. script de classement
    Par Pauli dans le forum Langage
    Réponses: 1
    Dernier message: 12/11/2007, 00h20
  4. tuto ou script sur un classement
    Par beezee dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 05/03/2006, 16h52

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