{MySQL} probleme requete

Résolu
Sbeuh Messages postés 9 Statut Membre -  
Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   -
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. moderno31 Messages postés 900 Statut Membre 92
     
    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
  2. Sbeuh Messages postés 9 Statut Membre
     
    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
  3. moderno31 Messages postés 900 Statut Membre 92
     
    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
  4. Sbeuh Messages postés 9 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. moderno31 Messages postés 900 Statut Membre 92
     
    à 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
  7. Sbeuh Messages postés 9 Statut Membre
     
    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
  8. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393
     
    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
  9. Sbeuh Messages postés 9 Statut Membre
     
    trop fort
    ca marche c good

    merciiii
    0
  10. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393
     
    Bonjour,

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