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 :

Compter le nombre de fois qu'un pilote à gagner dans une saison [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 21
    Points : 12
    Points
    12
    Par défaut Compter le nombre de fois qu'un pilote à gagner dans une saison
    Bonjour à tous, je me casse la tête sur ce problème depuis trois jours et pas moyen de m'en sortir donc je viens vers vous.

    J'ai deux tables sql

    La premier est faites ainsi

    Gp : id_gp,id_circuit,annee,pole,mt

    Elle sert à enregistrer tous les gp de la saison de F1

    une autre table

    resultat_gp : id_gp,place,id_pilote,id_ecurie,abandon,commentaire

    Voilà ce que je voudrais arriver à faire : Compter le nombre de fois qu'un même id_pilote a été en place 1 la même annee

    J'ai essayé plein de truc avec la fonction COUNT mais cela me sort des résultat complétement louffoque à chaque fois

    Voilà à quoi ressemble les tables remplit

    gp : 1,25,2010,7,7
    2,26,2010,8,9
    etc etc

    et dans la table resultat gp

    1,1,7,15,0,""
    1,2,6,15,0,""
    .....
    2,1,7,15,0,""
    2,2,15,14,0,""
    ....

    Comment compter donc le nombre de fois que le chiffre 1 apparait en fonction dans l'année 2010 et que cela me donne l'id_pilote à chaque fois

    du coup je voudrais un résultat comme celui ci

    id_pilote count(place)
    1 5
    7 4
    ....

    J'espère que je suis clair et merci de votre aide

  2. #2
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    Bonjour,

    peut être voir du coté de sql, mais comme ça à vue de nez, peut etre faire une requete du genre :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select count(*) as nbPlace, idPilote FROM resultatGp AS rg
    INNER JOIN GP AS g ON g.idGp = rd.idGp
    GROUP BY rg.place HAVIG rg.place = 1 WHERE g.annee = ‘2010
    Mais je ne suis pas sur du résultat...
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Le résultat n'est pas bon mais j'ai trouvé une solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select a.id_pilote, SUM(a.place) PLACE FROM resultat_gp a, gp b WHERE a.id_gp = b.id_gp AND a.place=1 AND b.annee=2009 GROUP BY a.id_pilote ORDER BY PLACE DESC
    Ce n'est peut être pas très académique mais cela fonctionne

  4. #4
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonjour,

    le WHERE a.champ = b.champ n'effectue pas une jointure à proprement parler mais un produit carthésien (plus long).

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT a.id_pilote, COUNT(a.place) as PLACE 
    FROM resultat_gp a 
    INNER JOIN gp b
    ON a.id_gp = b.id_gp 
    WHERE b.annee=2009 AND a.place=1
    GROUP BY a.id_pilote 
    ORDER BY PLACE DESC

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Comment compter donc le nombre de fois que le chiffre 1 apparait en fonction dans l'année 2010 et que cela me donne l'id_pilote à chaque fois
    Si je me tiens à ce que tu exprime, ça se résumerait à dire : Sélectionner les vainqueurs de l'année 2010.
    Ce qui donnerait cette requête :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT id_pilote
    FROM resultat_gp AS r
    INNER JOIN GP AS g ON g.id_gp = r.id_gp
    WHERE r.place = 1
    AND YEAR(g.annee) = 2010
    Ensuite, à part peut être certains cas particuliers, donc théoriquement le nombre de vainqueurs de 2010 devrait être le même que le nombre de grands prix disputés.
    Finalement, Théoriquement toujours, le nombre de lignes total que retournera la requête ci-dessus devrait être le nombre total de 1 dans le champ "place" pour l'année 2010.
    Bref ... théoriquement, le nombre de vainqueurs ou le nombre de grands prix disputés dans une année c'est pareil, non ?


    Là où je veux en venir, c'est qu'il ne serait pas nécessaire de faire un COUNT() pour obtenir ce nombre, car il devrait être le même tout le temps.
    Le plus simple c'est de soit faire un mysql_num_rows(), qui retourne le nombre de ligne.
    Ou alors, socker les ligne dans un tableau lors de la boucle, et après ça faire un count($tableau) en Php pour obtenir le nombre de ligne.
    Suffit après de faire une boucle foreach() sur le tableau pour afficher les pilotes.


    Par contre, si le but est d'obtenir le nombre de victoires des pilotes dans une année (sous entendu, qu'il peu en avoir plusieurs) , là c'est tout autre chose il me semble.
    J'en ai pas l'impression d'après ce que tu dis.
    A voir donc.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

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

Discussions similaires

  1. Macro pour compter le nombre de fois qu'apparait un mot dans une feuille
    Par arno1975 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/02/2014, 09h27
  2. [XL-2010] Compter le nombre de fois qu'apparait un texte dans une plage de donnée nommée
    Par saloupio dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 31/01/2014, 08h17
  3. Réponses: 2
    Dernier message: 22/01/2009, 10h12
  4. Réponses: 4
    Dernier message: 06/12/2007, 16h46
  5. Réponses: 16
    Dernier message: 14/09/2006, 06h43

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