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 :

établir classement selon critères multiples


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut établir classement selon critères multiples
    Bonjour,

    Je dispose d'une table qui stocke les données de points de joueurs à différentes compétition...
    Celle-ci se compose des champs :
    - id_result (est-ce toujours indispensable d'avoir un identifiant unique ?)
    - manifestation
    - titre (vainqueur, finaliste, 1/2 finaliste, etc)
    - points
    - bonus
    - licence

    je dois afficher le classement en cumulant les points et bonus pour chaque joueur, jusque là pas de problème ...

    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
     
    $sql = 
    <<<SQL
    SELECT
    	id_result_gp,
    	manifestation,
            type,
    	titre,
    	SUM(points) as points,
    	licence,
    	SUM(bonus) as bonus,
    	nom,
    	prenom,
    	id_joueur
     
    FROM
        resultats_gp_2012
        INNER JOIN joueur ON resultats_gp_2012.licence = joueur.id_joueur
    WHERE
        resultats_gp_2012.id_result_gp != "" 
     
    GROUP BY licence ORDER BY points DESC, nom ASC
    SQL;
     
     
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$req.'<br />'.mysql_error());
    ...
    ... mais je suis contraint de respecter un grand nombre de critères pour établir ce classement et là je ne sais pas trop comment m'y prendre, à savoir :
    1. le nombre de finale gagnée (nbr de fois que "vainqueur" est présent pour chaque "licence")
    2. le nombre de finale perdue (nbr de fois que "finaliste" est présent pour chaque "licence")
    3. le nombre de 1/2 finale jouée (nbr de fois que "1/2 finaliste" est présent etc..)
    4. le nombre de 1/4 de finale jouée
    5. le nombre de 1/8 de finale jouée
    6. le nombre de points bonus (cumul des "bonus" par licence)
    7. le nombre de participation dans les catégories (nbr de participation "1" ou "2" pour chaque licence)
    8. l'ordre alphabétique des noms en cas d'égalité

    D'avance merci pour votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux récupérer les données de la bdd sans opération et produire l'analyse en PHP

    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
    $sql = '
    SELECT
    	id_result_gp,
    	manifestation,
            type,
    	titre,
    	points,
    	licence,
    	bonus,
    	nom,
    	prenom,
    	id_joueur
    FROM
        resultats_gp_2012
        INNER JOIN joueur ON resultats_gp_2012.licence = joueur.id_joueur
    WHERE
        resultats_gp_2012.id_result_gp != ""'; 
    $req = mysql_query($sql);
     
    $tblTitre = array('vainqueur'=>0, '1/2finaliste'=>0, '1/4finaliste'=>0);
    while ($row = mysql_fetch_assoc($req)) {
    if (!isset($tblResultat[$row['id_joueur']][$row['license']]) {
        // on initialise juste pour que ce soit propre
        $tblResultat[$row['id_joueur']][$row['license']]['titres'] = $tblTitre;
        $tblResultat[$row['id_joueur']][$row['license']]['points'] = 0;
    }
    $tblResultat[$row['id_joueur']][$row['license']]['titres'][$row['titre']]++;
    $tblResultat[$row['id_joueur']][$row['license']]['points'] += $row['points'];
    }
    Dans cet exemple, le joueur 4 dans la license B a été 1/2finaliste
    $tblResultat[4]['B']['titres']['1/2finaliste'] fois et a $tblResultat[4]['B']['points'] points au total.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Arff je galère (heureusement que j'ai posté dans le forum débutant ), comment j'effectue le classement ensuite ?

    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
     
    $tblTitre = array('Vainqueur'=>0, 'Finaliste'=>0, '1/2 fina'=>0, '1/4 fina'=>0, '1/8 fina'=>0);
    $tblType = array('GP'=>0, 'GPCT'=>0);
    while ($row = mysql_fetch_assoc($req)) {
    if (!isset($tblResultat[$row['id_joueur']][$row['license']]) {
        // on initialise juste pour que ce soit propre
        $tblResultat[$row['id_joueur']][$row['license']]['titres'] = $tblTitre;
        $tblResultat[$row['id_joueur']][$row['license']]['points'] = 0;
    	$tblResultat[$row['id_joueur']][$row['license']]['bonus'] = 0;
    	$tblResultat[$row['id_joueur']][$row['license']]['type'] = $tblType;
    }
    $tblResultat[$row['id_joueur']][$row['license']]['titres'][$row['titre']]++;
    $tblResultat[$row['id_joueur']][$row['license']]['points'] += $row['points'];
    $tblResultat[$row['id_joueur']][$row['license']]['bonus'] += $row['bonus'];
    $tblResultat[$row['id_joueur']][$row['license']]['type'][$row['type']]++;
    }
    ...je rajoute un ORDER BY points, $tblType
    (c'est quoi +=) pour points et bonus ?

    Merci pour votre aide

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Citation Envoyé par sabefa Voir le message
    (c'est quoi +=) pour points et bonus ?
    équivaut à
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    merci pour cette précision

Discussions similaires

  1. [AC-2010] Requête Classement selon critère
    Par stsym dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 12/09/2013, 07h55
  2. [XL-2010] Somme d'éléments selon critères multiples
    Par mft_ghost dans le forum Excel
    Réponses: 14
    Dernier message: 23/09/2011, 14h04
  3. [AC-2007] Afficher ETAT unique selon critères multiples
    Par krissm74100 dans le forum IHM
    Réponses: 0
    Dernier message: 22/06/2011, 15h50
  4. Enregistrement multiple selon critère
    Par croke dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 17/06/2010, 15h57
  5. Réponses: 7
    Dernier message: 29/06/2006, 11h11

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