PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 24-09-2011 19:16:46

Sq78
Membre
Inscription : 13-05-2009
Messages : 47

mise à jour d'une table avec les données d'une autre

Bonsoir,
Je possède 2 tables comme ceci:

table effectifs:

  id_joueur  nom  prenom  nationalite  taille  poste  date_de_naissance  saison  id_club  
      17 GEILER Baptiste France 1,98 Attaquant(e) / Réceptionneur(se) 1987-03-12 Saison 2011/2012 13

et la table parcours comme ceci:

  id  nom  prenom  club  saison  
      1026 GEILER Baptiste Montpellier Volley Université Club Saison 2007/2008
      1027 GEILER Baptiste Montpellier Volley Université Club Saison 2008/2009
      1028 GEILER Baptiste Arago de Sète V.B Saison 2009/2010
      3121 GEILER Baptiste Arago de Sète V.B Saison 2010/2011
      4174 GEILER Baptiste Arago de Sète V.B Saison 2011/2012

Dans la table parcours, je souhaiterais rajouter le champ id_joueur correspondant à la table effectifs, ce qui donnerait ceci:

  id  id_joueur nom  prenom  club  saison  
      1026 17 GEILER Baptiste Montpellier Volley Université Club Saison 2007/2008
      1027 17 GEILER Baptiste Montpellier Volley Université Club Saison 2008/2009
      1028 17 GEILER Baptiste Arago de Sète V.B Saison 2009/2010
      3121 17 GEILER Baptiste Arago de Sète V.B Saison 2010/2011
      4174 17 GEILER Baptiste Arago de Sète V.B Saison 2011/2012

Mes 2 tables sont déjà remplies et contiennent des milliers d'enregistrements, c'est pour celà que je souhaite faire la modif autrement qu'à la main.
Est-ce possible directement avec Mysql ?

Merci d'avance de votre aide

Hors ligne

#2 24-09-2011 20:11:01

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : mise à jour d'une table avec les données d'une autre

Bonjour,

Cela n'est pas ainsi qu'il faut procéder. Il te faut créer une table de jonction avec en clé primaire, une clé composite : id_joueur + id_parcours. Cela sera par conséquent une table qui reliera pour chaque joueur un parcours et en assurera l'unicité. Tu aurais du procéder de même pour tes clubs... Mais bon c'est aussi comme cela que l'on apprends les choses.

++

Dernière modification par Jc (24-09-2011 20:13:00)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 25-09-2011 08:13:48

nicolas
Membre
Inscription : 11-11-2009
Messages : 69
Site Web

Re : mise à jour d'une table avec les données d'une autre

Premièrement oui c'est possible de faire ça de manière semi-automatique. Mais comme l'a dit jsutement dit grand maître Jc, il faut revoir le schéma de ta base de données.

Commence par faire une sauvegarde complète de la base ou du moins des tables concernées.

Je ne suis pas sûr q'il faille faire nécessairement faire une table de jointure mais pour le moment tu peux faire quelque chose comme ça :

table effectifs
id_joueur int(9) auto_increment,
nom varchar(255)
prenom  varchar(255)
nationalite  varchar(255)
taille float
poste  varchar(255)
date_de_naissance datetime
saison  varchar(255)
id_club int(9)

table parcours
id int(9) auto_increment,
id_joueur int(9),
id_club int(9)
saison varchar(255)

table clubs
id int(9) auto_increment,
nom
// autres infos, adresses,...

L'avantage de ce schéma est de ne pas dupliquer d'informations. Par exemple les noms des joueurs ne sont que dans la table effectifs, le nom des clubs que dans la table clubs,...

Est-ce que tu veux de l'aide pour re-remplir tes tables et mettre à jour les requêtes ?

Hors ligne

#4 25-09-2011 09:34:55

Sq78
Membre
Inscription : 13-05-2009
Messages : 47

Re : mise à jour d'une table avec les données d'une autre

Bonjour,
J'ai réussi à faire ce que je voulais avec un petit programme en php comme ceci:

J'ai rajouté un champ id_joueur dans la table lnv_parcours en ensuite, j'ai lancé ce petit programme

$query="select id_joueur, nom, prenom FROM lnv_effectifs";
$result = mysql_query($query) or die('Erreur SQL !'.$sql.''.mysql_error());
  while($row = mysql_fetch_array($result)){
  $q2="update lnv_parcours set id_joueur='".$row['0']."' where nom = '".$row['1']."' and prenom='".$row['2']."'";
  $r2 = mysql_query($q2) or die('Erreur SQL !'.$sql.''.mysql_error());
}

Bon, ce n'est ni optimisé ni "joli" mais ça a eu le mérite de marcher et c'était pour mes besoins personnels, pas pour faire tourner mon programme ensuite.

Mais pour citer le message de Nicolas, effectivement, quand je regarde mes 3 tables concernées, on voit bien que des informations sont dupliquées. Je vais optimiser tout ça.
Merci de votre aide.

Dernière modification par Sq78 (25-09-2011 14:17:32)

Hors ligne

#5 09-11-2011 00:15:24

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : mise à jour d'une table avec les données d'une autre

Bonsoir,

Désolé j'avais oublié de lire ta réponse...
Ce que tu viens de faire en PHP je n'en vois pas l'intérêt dans le sens où il est facile de faire la même chose via une requête MySQL. Pourquoi? Parce que ta méthode est incorrecte elle ne gère pas les homonymies. L'intérêt de passer par PHP aurait été justement de le gérer. Pour le faire en MySQL avec gestion des homonymies, il faut prendre un jeu de critères identifiant de manière unique deux joueurs homonymes, et n'ayant pas cette info on ne peut te proposer de solution viable de requête.

Cependant, revoir la structure de ta DB reste le meilleur conseil que l'on puisse te donner sur ce forum.

++

Dernière modification par Jc (09-11-2011 00:17:19)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#6 14-11-2011 21:50:06

Sq78
Membre
Inscription : 13-05-2009
Messages : 47

Re : mise à jour d'une table avec les données d'une autre

Bonjour,
Effectivement, je pense avoir compris mon erreur (Qui heureusement n' pas d'incidence parce qu'aucun jour a le même nom/prenom)
J'ai encore pas mal de choses à apprendre. D'ailleurs, c'est l'objet de mon nouveau post :-)

Hors ligne

Pied de page des forums