Problème de relation

Résolu
stu76 Messages postés 186 Date d'inscription samedi 5 mars 2005 Statut Membre Dernière intervention 17 février 2008 - 6 oct. 2006 à 17:15
yobuntu Messages postés 7 Date d'inscription lundi 30 octobre 2006 Statut Membre Dernière intervention 2 novembre 2006 - 2 nov. 2006 à 17:09
Hello,

J'ai un problème et je ne trouve pas d'info pour m'aider, j'ai une base de données qui contient 7 tables InnoDB. Et je dois mettre c'est table en relation mais je sais pas comment on fait dans la pratique. Je comprend la théorie de 1à1 ou 1à plusieurs, ... Mais comment faire avec MySQL.

Si quelqu'un à un site ou un tuto qui peut m'aider se serait vraiment super.

Merci d'avance,

++

21 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 oct. 2006 à 18:22
Oui, j'ai assumé que c'était du n-n en fait.
1 utilisateur peut être lié à plusieurs classes ?
1 classe à plusieurs utilisateurs ?

Si c'est 1 utilisateur lié à 1 classe, et 1 classe à n utilisateur, il faut changer :
table USERS
user_id
user_nom
...
class_id

table CLASSES
class_id
class_nom
...

Et ça suffit.
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 oct. 2006 à 18:23
Et puisque j'y suis :

http://www.sam-mag.com/P53,53,5,55,,,default.aspx

très bon article qui résume Merise. Bon pense-bête :-)
3
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
6 oct. 2006 à 17:32
Tu dois faire des relations ? Je vois pas trop ce que tu veux dire a part peut etre les instructions sql de type INNER JOIN ou OUTER JOIN qui permettent de "lier" differentes tables dans une seule requete.

=> http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap20.htm
Sa peut toujours t'aider...

@+
0
stu76 Messages postés 186 Date d'inscription samedi 5 mars 2005 Statut Membre Dernière intervention 17 février 2008 1
6 oct. 2006 à 17:47
Je prend un exemple concret entre ma table utilisateurs et ma table classe je dois établir une relation de un à plusieurs, sous access pas de prob je fais mon organigrame et le tour est joué mais ici je vois pas comment.

Comment peut-on faire pour arriver a ce résultat avec mysql, ou doit-on faire uniquement par requête sql dans le code php. Si c'est dans le code php est ce que quelqu'un aurait un exemple.

En tout cas merci de t'intérreser à mon prob jean84 
0

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

Posez votre question
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
6 oct. 2006 à 18:03
Desole mais la je crois que sa depasse mes competences. En plus je ne vois pas trop ce que tu veux dire par relation de 1 ou plusieurs et puis sincerement, moi et access.....

@+
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 oct. 2006 à 18:13
Hello,

table USERS
user_id
user_nom
...

table CLASSES
class_id
class_nom
...

table LNK_USERS_CLASSES
user_id
class_id
0
stu76 Messages postés 186 Date d'inscription samedi 5 mars 2005 Statut Membre Dernière intervention 17 février 2008 1
6 oct. 2006 à 18:13
Salut jean84,



Merci quand même c'est sympa de t'être penché sur mon prob.



++
0
stu76 Messages postés 186 Date d'inscription samedi 5 mars 2005 Statut Membre Dernière intervention 17 février 2008 1
6 oct. 2006 à 18:18
Salut malalam,

Merci pour ton aide, donc si je comprend bien je dois passer par une table intermédiaire. Je teste ce soir et te dit quoi après.

Bonne soirée.

++
0
stu76 Messages postés 186 Date d'inscription samedi 5 mars 2005 Statut Membre Dernière intervention 17 février 2008 1
6 oct. 2006 à 23:02
Merci Malalam ,



Ton aide est précieuse, j'ai test et c'est bon

++
0
yobuntu Messages postés 7 Date d'inscription lundi 30 octobre 2006 Statut Membre Dernière intervention 2 novembre 2006
30 oct. 2006 à 17:48
bonjour, je me permet de m'incruster dans la conversation pour contribuer un peu et pour demander un peu d'aide:

Dans le cadre d'une relation n-n avec les tables

table USERS
user_id
user_nom
...

table CLASSES
class_id
class_nom
...

table LNK_USERS_CLASSES
user_id
class_id


Si on veut récupérer le user_nom des tout les user liées a la class d'id 1:

SELECT user_nom
FROM (USERS INNER JOIN LNK_USERS_CLASSES ON
USERS.user_id=LNK_USERS_CLASSES.user_id_ID)
WHERE LNK_USERS_CLASSES.class_id=1
ORDER BY user_nom;


Maintenant mon problème: récuperer le user_nom de tout les users qui NE sont PAS
liées à la classe d'id 1.

En esperant que vous avez compris mon message et que vous serez en mesure de m'aider

yohann
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
30 oct. 2006 à 17:56
Hello,

heu...LNK_USERS_CLASSES.class_id != 1

?
0
yobuntu Messages postés 7 Date d'inscription lundi 30 octobre 2006 Statut Membre Dernière intervention 2 novembre 2006
30 oct. 2006 à 18:24
Merci pour ta réponse (trop) rapide...

c'est ce à quoi j'ai pensé en premier, Mais un utilisatuer qui n'est lié a aucune classe n'apparaitra pas car il ne sera pas "référencé" dans la table LNK_USER_CLASSES.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
31 oct. 2006 à 08:06
Ah, fallait l'dire ;-)

LEFT JOIN il me semble...regarde les JOIN, je ne sais jamais lequel va chercher les éléments non présents dans le ON. Mais il y en a un.
0
yobuntu Messages postés 7 Date d'inscription lundi 30 octobre 2006 Statut Membre Dernière intervention 2 novembre 2006
31 oct. 2006 à 09:38
merci donc j'essaye LEFT JOIN au lieu de INNER JOIN + LNK_USERS_CLASSES.class_id!=1 ce qui donne la requête suivante

SELECT user_nom
FROM (USERS LEFT JOIN LNK_USERS_CLASSES ON
USERS.user_id=LNK_USERS_CLASSES.user_id_ID)
WHERE LNK_USERS_CLASSES.class_id!=1
ORDER BY user_nom;
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
31 oct. 2006 à 10:14
Si ta colonne est déclarée NOT NULL, tu devrais faire ça :
SELECT user_nom
FROM USERS LEFT JOIN LNK_USERS_CLASSES ON
USERS.user_id=LNK_USERS_CLASSES.user_id_ID
WHERE LNK_USERS_CLASSES.class_id!=1
OR LNK_USERS_CLASSES.class_id IS NULL
ORDER BY user_nom;
0
yobuntu Messages postés 7 Date d'inscription lundi 30 octobre 2006 Statut Membre Dernière intervention 2 novembre 2006
31 oct. 2006 à 10:31
ok merci pour le tuyau, j'essaye de suite!
0
yobuntu Messages postés 7 Date d'inscription lundi 30 octobre 2006 Statut Membre Dernière intervention 2 novembre 2006
31 oct. 2006 à 11:17
On y est presque, merci beaucoup, le probleme se pose maintenant pour le cas d'un utilisateur qui appartient à la classe (et qui pour cette raison ne devrait pas être selectionner) et qui appartient à une autre classe aussi.

En tout cas bien merci
0
stu76 Messages postés 186 Date d'inscription samedi 5 mars 2005 Statut Membre Dernière intervention 17 février 2008 1
31 oct. 2006 à 17:03
Salut,

Je suis vos débat entre toi et malalam, qui d' ailleur ta donner des infos intér. Car j'étais confronté plus ou moins au même prob du coup il a fait d'une pierre deux coups. Merci malalam.

Mais yobuntu j'aimerais savoir tu travail sur une application scolaire ? Si oui on peu, peut-être échanger des idées et se refiler des infos des tuyaux l'un l'autre. Si tu es inter contact moi. 

++

Stu76
0
yobuntu Messages postés 7 Date d'inscription lundi 30 octobre 2006 Statut Membre Dernière intervention 2 novembre 2006
31 oct. 2006 à 17:17
en fait le probleme vient de !=1

ce que je voudrait faire c'est plutôt soustraire

SELECT user_nom
FROM USERS LEFT JOIN LNK_USERS_CLASSES ON
USERS.user_id=LNK_USERS_CLASSES.user_id_ID
WHERE LNK_USERS_CLASSES.class_id=1

à

SELECT user_nom
FROM USERS LEFT JOIN LNK_USERS_CLASSES ON
USERS.user_id=LNK_USERS_CLASSES.user_id_ID
WHERE LNK_USERS_CLASSES.class_id!=1
OR LNK_USERS_CLASSES.class_id IS NULL
ORDER BY user_nom;

ceci pour éviter de selectionner un user qui appartient à la fois à la classe 1 et à la classe 2.

J'espère que mon message ne vous embrouille pas trop.

Je crois que je pourrais faire cela par une fonction en php mais cela me prendrai un peu de temps et surtout ralentirai pas mal l'execution.

PS: ou est le bouton éditer?

@stu76, je ne travaille pas sur une application scolaire, mais ça n'empeche pas qu'on se donne des tuyaux...
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
31 oct. 2006 à 18:20
Tu peux faire des sous requêtes avec ta version de mysql...mssql, c'est quoi d'ailleurs, ton serveur de bdd ?
0