MySQL conditions plusieurs tables

Résolu/Fermé
hooli Messages postés 85 Date d'inscription jeudi 10 septembre 2009 Statut Membre Dernière intervention 1 décembre 2011 - Modifié par hooli le 13/05/2011 à 15:43
Malekal_morte- Messages postés 180304 Date d'inscription mercredi 17 mai 2006 Statut Modérateur, Contributeur sécurité Dernière intervention 15 décembre 2020 - 16 mai 2011 à 14:23
Bonjour,

Je suis débutante dans le mySQL et j'aimerai arriver à ceci:


J'ai une table Eleve avec une FK_note, FK_module
J'ai une table note
J'ai une table module

J'aimerai faire la moyenne d'un élève precis en fonction du genre de module.
Je m'explique:

Dans module il y a "genre" avec comme valeur, CIE, Module, CFC.

Il me faudrai la moyenne CIE de jean dupon.

Voici mon code:

SELECT AVG( fk_note ) AS note
FROM t_eleve
WHERE nomele = 'Dupon'
AND prenomele = 'Jean'
AND fk_module = '4'
OR fk_module = '5'
OR fk_module = '6'


fk_module = id_module

Le problème c'est qu'il me fait la moyenne des élèves (n'importe lesquelles) qui ont une valeur 4, 5, ou 6 dans leur FK_module, et non de jean dupon précisément.

Ou est mon erreur?

Merci d'avance pour le temps que vous allez m'accorder.

Hooli




2 réponses

Malekal_morte- Messages postés 180304 Date d'inscription mercredi 17 mai 2006 Statut Modérateur, Contributeur sécurité Dernière intervention 15 décembre 2020 24 660
13 mai 2011 à 16:31
Salut,

Tes conditions ne sont pas assez restrictives (si j'ai bien compris ce que tu voulais faire), si tu veux avoir que le nom/prénom Jean Dupond et jouer sur les notes, faut ajouter des parenthèses :

SELECT AVG( fk_note ) AS note
FROM t_eleve
WHERE (nomele = 'Dupon'
AND prenomele = 'Jean')
AND
(fk_module = '4'
OR fk_module = '5'
OR fk_module = '6')

pour n'avoir que le nom et prénom jean dupond ET fk_module = (4 ou 5 ou 6)
0
hooli Messages postés 85 Date d'inscription jeudi 10 septembre 2009 Statut Membre Dernière intervention 1 décembre 2011 7
16 mai 2011 à 09:30
Merci beaucoup Malekal_morte- Tu as réglé mon problème!

Excellente journée à toi!
0
hooli Messages postés 85 Date d'inscription jeudi 10 septembre 2009 Statut Membre Dernière intervention 1 décembre 2011 7
16 mai 2011 à 09:40
Cependant j'aurai une autre question, est-il possible, au lieu de faire avec l'id de module, de faire avec genre?

du type:

SELECT AVG( fk_note ) AS note
FROM t_eleve, t_module
WHERE (
nomele = 'Dupon'
AND prenomele = 'Jean'
)
AND (
t_module.genre = 'CFC'
)

Car j'ai essayer mais il me donne la moyenne de jean dupon dans n'importe quel genre, et non que de CFC.

Car avec les FK, c'est tout bon!

Merci de votre aide!
Bonne journée
0
Malekal_morte- Messages postés 180304 Date d'inscription mercredi 17 mai 2006 Statut Modérateur, Contributeur sécurité Dernière intervention 15 décembre 2020 24 660
Modifié par Malekal_morte- le 16/05/2011 à 15:10
Cool :)

Par contre ; tes ( ) dans la seconde expression ne servent à rien

AND (
t_module.genre = 'CFC'
)


les ( ) ne sont intéressantes que pour regrouper des conditions et comme la tu en as qu'une.

Sinon pour ta question, ça doit être possible à travers une jointure mais pour ça faut un id communs entre note et module afin de savoir dans quel module se trouve la note et là je vois pas trop comment c'est fichu ton truc.

C'est fait comment au niveau des tables notes et modules ?


Yes, no, maybe
I don't know
Can you repeat the question?
You're not the boss of me now
0