Generation automatique d'une table

cs_faty86 Messages postés 20 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 5 juin 2008 - 7 avril 2008 à 15:36
cs_faty86 Messages postés 20 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 5 juin 2008 - 8 avril 2008 à 15:30
Bonjour,
Actuellement je travaille sur une application utilisant PHP & MySQL, j'ai un problème que voici:

Dans ma base de données j'ai les tables:

 

Equipement (ID_EQ,designation...)

Connexion (ID_CN,Type...)

 

Etat(# ID_EQ, # ID_CN)

 

--> Un Equipement peut appartenir une ou plusieurs connexions

-->Une connexion peut avoir un ou plusieurs Equipements

 

Comment générer la table ETAT automatiquement au fur et a mesure que j'ajoute des equipements et des connexions?? Car elle représente juste un lien entre ces 2 tables.

Merci de votre aide c'est vraiment très urgent.

 

7 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
7 avril 2008 à 17:52
Salut,

Je comprends pas bien le sens de ta question... Ou plutôt, le sens que tu donnes à "générer" en parlant de la table...

Ta table permet effectivement de faire la relation entre les deux autres tables... Tu as la structure, je ne vois pas où il y a un problème...

Dans tes tables 'Equipement' et 'Connexion', les identifiants sont uniques et probablement de type auto_increment (peu importe à vrai dire). Ils sont surtout uniques.

Dans ta table Etat, les champs 'ID_EQ' et 'ID_CN' ne sont pas indexés séparément : il ne faut pas y mettre de clef de type 'PRIMARY' ou 'UNIQUE' dessus.
Il faut créer une clef portant sur ces deux champs, en tant que simple 'INDEX'.

Dans une même colonne, une valeur pourra se répéter : c'est pas grave... C'est justement du au fait qu'une connexion peut avoir plusieurs équipements et qu'un même équipement peut servir pour deux connexion.

Si tu le souhaites, tu peux rajouter un champ indexé PRIMARY de type auto_increment, mais ça n'apportera absolument rien, puisqu'a priori, aucune de tes requêtes ne portera dessus.

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0
Axe971 Messages postés 75 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 9 janvier 2009 2
7 avril 2008 à 17:56
Salut,

Et bien à mon avis, quand tu ajoutes un équipement. Tu récupères son identifiant et les identifiants des connexions auxquelles ils appartient puis tu fais des INSERT pour chaque connexion avec le même équipement.

De même pour une connexion, quand tu ajoutes une connexion. Tu récupères son identifiant et les
identifiants des équipements qu'elle comprend puis tu fais des
INSERT pour chaque équipement avec la même connexion.

Bonne chance,
0
cs_faty86 Messages postés 20 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 5 juin 2008
8 avril 2008 à 11:34
 Je pense que je vais faire comme a dit Axe971, je vais faire des INSERT directement dans php au fur et à mesure des ajouts des equipements et des connexions!
Merci beaucoup pour votre aide !!!
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
8 avril 2008 à 14:27
Salut,

Bon et j'ai toujours pas compris quel était réellement le problème...

Bref.

En faisant tes insert, fais quand même attention à ce que le couple (ID_EQ, ID_CN) ne soit pas déjà présent. Si c'est le cas, il faut faire une update.

Sinon, c'est peut-être là que peut intervenir une index unique, mais non auto_increment.Cet index UNIQUE serait (par exemple) une concaténation des deux autres. Par exemple pour ID_EQ 4 et ID_CN 12, tu aurais un ID_EQ_CN = e4c12
Ca t'assure que le couple (4, 12) est unique.
Avec la simple requête :
INSERT INTO `table` (ID_EQ_CN, ID_EQ, ID_CN) VALUES ('e4c12', 4, 12);

Si elle échoue, c'est que le couple était déjà présent (il faut bien entendu faire un contrôle d'erreurs pour gérer ça correctement), sinon il est inséré dans la table.

Si ta relation 'equipement-connexion' a des propriétés (ie des champs supplémentaires dans la table Etat), alors tu peux les mettres à jour avec la même requête :
INSERT INTO `table` (ID_EQ_CN, ID_EQ, ID_CN, prop1, prop2)
VALUES ('e4c12', 4, 12, val_prop1, val_prop2)
ON DUPLICATE KEYS UPDATE prop1=val_prop2, prop2=val_prop2;

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0

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

Posez votre question
cs_faty86 Messages postés 20 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 5 juin 2008
8 avril 2008 à 14:39
Neige,

Mon problème est que je cherchai une solution pour que la table ETAT soit remplie au fur et à mesure qu'on insère des connexions et de equipements. J'ai pas trouvé de solution directement dans mysql donc je vais le faire dans php.
 C'est une très bonne idée de faire intervenir un index unique qui est la concaténation des deux autres champs(connexion et equipement) ça facilite beaucoup le travail!!

Merci beaucoup!!!
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
8 avril 2008 à 15:22
Mmmm... Ok... J'avoue que si c'est possible avec MySQL, je ne suis pas assez calé pour savoir comment.
L'idée de concaténer les ID n'est pas de moi, mais vient tout droit de la méthode Merise.
Quand une table sert de relation entre deux, qu'elle porte ou non des propriétés propres à cette relation, son identifiant EST la concaténation des deux identifiants des tables liées.
Après, c'est juste une manière de l'implémenter en php.

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0
cs_faty86 Messages postés 20 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 5 juin 2008
8 avril 2008 à 15:30
En tout cas merci beaucoup , je ne suis pas experte en PHP donc ton aide est précieuse !!!
0
Rejoignez-nous