{MySQL} probleme requete

Résolu/Fermé
Sbeuh Messages postés 9 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 11 octobre 2010 - 8 sept. 2009 à 00:50
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 - 9 sept. 2009 à 13:38
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

9 réponses

moderno31 Messages postés 870 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 92
8 sept. 2009 à 07:41
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
Sbeuh Messages postés 9 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 11 octobre 2010
8 sept. 2009 à 07:56
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
moderno31 Messages postés 870 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 92
8 sept. 2009 à 08:10
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
Sbeuh Messages postés 9 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 11 octobre 2010
8 sept. 2009 à 09:04
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
moderno31 Messages postés 870 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 92
8 sept. 2009 à 14:49
à 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
Sbeuh Messages postés 9 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 11 octobre 2010
9 sept. 2009 à 12:46
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
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 383
9 sept. 2009 à 12:53
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
Sbeuh Messages postés 9 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 11 octobre 2010
9 sept. 2009 à 12:58
trop fort
ca marche c good

merciiii
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 383
9 sept. 2009 à 13:38
Bonjour,

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