{MySQL} probleme requete

Résolu
Bonjour,

j'ai 3 tables :

user -> id_user , login_user , pass_user

journee -> id_journee , id_champ(cle etrangere championnat) , id_user(clé etrangere user qui correspond a la premiere position dans le classement de la journee) , use_id_user(cle etrangere user 2eme position) , date

championnat -> id_champ , nom_champ

et je voudrais recuperer le nbre de fois premier et deuxieme pour chaque joueur pour effectuer le classement

et la je cale

je crois que j'ai un gros soucis dans la structure de mes tables

si quelqu'un a des suggestions...

merci d'avance
Configuration: Windows
Safari 530.5

9 réponses

  1. hello j'ai pas compris là !
    Tu peux redéfinir ton besoin :
    et je voudrais recuperer le nbre de fois premier et deuxieme pour chaque joueur pour effectuer le classement ???
    Et me mettre la sctructre complete de tes tables. Il faut que les clés soient justes sinon ya va coincer pour la ou les jointures.
    0
    1. je veux faire le classemet d'un championnat de poker pour ca j'ai crée 3 tables

      user championnat et journee

      --
      -- Structure de la table `championnat`
      --

      CREATE TABLE `championnat` (
      `ID_CHAMP` int(11) NOT NULL auto_increment,
      `NOM_CHAMP` varchar(25) default NULL,
      PRIMARY KEY (`ID_CHAMP`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

      -- --------------------------------------------------------

      --
      -- Structure de la table `journee`
      --

      CREATE TABLE `journee` (
      `ID_JOURNEE` int(11) NOT NULL auto_increment,
      `ID_CHAMP` int(11) NOT NULL,
      `ID_USER` int(11) NOT NULL,
      `USE_ID_USER` int(11) NOT NULL,
      `DATE` date default NULL,
      PRIMARY KEY (`ID_JOURNEE`),
      KEY `FK_CORRESPONDRE` (`ID_CHAMP`),
      KEY `FK_PREMIER` (`ID_USER`),
      KEY `FK_SECOND` (`USE_ID_USER`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

      -- --------------------------------------------------------

      --
      -- Structure de la table `user`
      --

      CREATE TABLE `user` (
      `ID_USER` int(11) NOT NULL auto_increment,
      `LOGIN_USER` varchar(20) default NULL,
      `PASS_USER` varchar(32) default NULL,
      PRIMARY KEY (`ID_USER`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

      --
      -- Contraintes pour les tables exportées
      --

      --
      -- Contraintes pour la table `journee`
      --
      ALTER TABLE `journee`
      ADD CONSTRAINT `FK_CORRESPONDRE` FOREIGN KEY (`ID_CHAMP`) REFERENCES `championnat` (`ID_CHAMP`),
      ADD CONSTRAINT `FK_PREMIER` FOREIGN KEY (`ID_USER`) REFERENCES `user` (`ID_USER`),
      ADD CONSTRAINT `FK_SECOND` FOREIGN KEY (`USE_ID_USER`) REFERENCES `user` (`ID_USER`);

      dans la table journee id_user correspond au joueur en premiere place et use_is_user carrespond au joueur a la deuxieme place

      et donc je cherche a faire une requete pour recuperer le nombre de fois ou le joueur a été en premiere place et en deuxieme place
      0
      1. pour l'instant tu ne peux pas savoir, la position du jouer au fur et à mesure des défaites ou des victoires tu ne l'enregistre pas (sauf erreur de ma part).
        Si j'ai bien compris la table des user permet d'identifier qui joue, celle des championnats (je ne comprends pas son utilité mais qu'importe), et celle de journée traduit le jour du jeu peut etre mais n'apporte rien de plus à mon sens. On ne sais pas quel score a faire user 2 par exemple, ni combien de flush a t-il fait, ni quelle durée a été le jeu, encore moins combien de fois a t-il été n° 1.
        Pour le compter il faut que l'information existe quelque part. Meme en faisant des jointures, je ne vois sur quoi, pour récupérer quoi... !!

        Donc ya un souci dans ton s.i
        0
        1. ma table user identifie chaque joueur
          ma table championnat sert juste a donner un nom a la saison
          et ma table journee correspond a une journee de championnat dans la quelle j'enregistre le premier(id_user) et le deuxieme(use_id_user)

          entre journée et user j'ai deux relations : 1- premier ce qui donne la clé etrangere id_user dans la table journee
          et 2- second qui donne la clé etrangere use_id_user

          ensuite pour mon classement je le fait en php pas de soucis la dessus

          maintenant je suis bien d'accord sur le fait que mon s.i. est mal fait mais je vois pas comment gerer ca autrement
          0
          1. à ta place, surtout si je veux des comptages justes et fiables je gèrerais direct le classement en base mais pas par php.
            Paarce que le résultat de ton calcul tu dois l'avoir en sortie de BD, sans même parler de PHP.
            Bref, ta structure est comme elle et dois surement convenir ainsi.

            Je comprends pas
            pk :
            ok -->premier(id_user)
            Pas ok pour ça -->deuxieme(use_id_user)
            use_id_user est cesé etre la clé étrangère du user dans journée. Alors ça devrait etre pareil comme point d'entrée.
            Pk tu parles de 2nd, j'y comprends rien.
            J'abandonne j'ai pas le temps de trop me pencher

            bonne chance
            0
            1. merci quand même pour ton aide

              2nd n'existe pas je voulais dire deuxieme

              en fait qd je fait :

              select login_user, count(journee.id_user)
              from user join journee
              on user.id_user=journee.id_user
              group by login_user

              je recupere bien le nombre de fois ou chaque joueur a été premier

              qd je fais :

              select login_user, count(journee.use_id_user)
              from user join journee
              on user.id_user=journee.use_id_user
              group by login_user

              je recupere le nombre de fois ou chaque joueur a été deuxieme

              ce que je veux c :

              select login_user, count(id_user), count(use_id_user)
              from.....

              mais la du coup j'ai le total de tous les joueurs

              je vois pas comment faire ma requete pour avoir sur chaque ligne de resultat login_user - le nombre de fois ou il a été premier - le nombre de fois ou il a été deuxieme

              si quelqu'un a une idée
              0
              1. Bonjour,

                Tu as presque la réponse dans ton dernier post, je pense qu'en utilisant le code suivant, tu devrais avoir ce que tu veux
                select login_user, count(journee.id_user),
                (select count(journee.use_id_user)
                from journee
                where login.user.id_user=journee.use_id_user)
                from user join journee
                on user.id_user=journee.id_user
                group by login_user 

                J'ai pas testé le code, à toi de voir si cela que tu recherches.
                A plus
                0
                1. trop fort
                  ca marche c good

                  merciiii
                  0
                  1. Bonjour,

                    Pas de problème, n'oublie pas de mettre le post comme résolu.
                    A plus
                    0