INSERT avec jointure

Résolu/Fermé
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 2 févr. 2016 à 14:04
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 2 févr. 2016 à 20:14
Bonjour,
J'ai 3 tables comme le montre ma capture. Je souhaiterai faire un INSERT afin d'ajouter les membres avec leurs dates d'inscription et leurs date de démission. En sachant que la relation est plusieurs à plusieurs, car 1 membre peut s'inscrire puis démissionner et de nouveau s'inscrire.
Pouvez-vous s'ils vous plait me conseiller pour la requête, je ne trouve pas d'explications sur le net.
En vous remerciant par avance.

4 réponses

papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
2 févr. 2016 à 20:14
Bonjour
Avec tes explications qui m'ont bien guidé j'ai réussi à faire ce que je souhaitais. je me permet de t'envoyer ma fonction juste pour me donner ton avis sur le fait que je récupére non seulement le dernier Adherent inséré mais aussi la dernière date d'entrée, je trouve ça presque anormal, mais bon ça a le mérite de fonctionner, si tu peux me donner ton avis.
Je te remercie
	public function AjoutMembre() {
		$sql = "INSERT INTO tb_adherent(nom, prenom, email, naissance, fixe, mobile, adresse, lieu_dit, code_postal, ville, pseudo, password)
				VALUES(:nom, :prenom, :email, :naissance, :fixe, :mobile, :adresse, :lieu_dit, :code_postal, :ville, :pseudo, :password)";
		$requete = $this->bdd->prepare($sql);
		$donnees = $requete->execute(array(
					'nom' 			=> $this->nom,
					'prenom' 		=> $this->prenom,
					'email' 		=> $this->email,
					'naissance' 	=> $this->naissance,
					'fixe' 			=> $this->fixe,
					'mobile' 		=> $this->mobile,
					'adresse' 		=> $this->adresse,
					'lieu_dit' 		=> $this->lieu_dit,
					'code_postal' 	=> $this->code_postal,
					'ville' 		=> $this->ville,
					'pseudo' 		=> $this->pseudo,
					'password' 		=> $this->password,
					));
		
		$id_adherent = $this->bdd->lastInsertId();		
		
		$sql2 = "INSERT INTO tb_entree(debut, fin)
				VALUES(:debut, :fin)";
		$requete2 = $this->bdd->prepare($sql2);
		$donnees = $requete2->execute(array(
									'debut' => $this->debut,
									'fin' 	=> $this->fin,
									));
		
		$rid_entree = $this->bdd->lastInsertId();
		
		$sql = "INSERT INTO tb_adherent_tb_entree(rid_adherent, rid_entree)
				VALUES(:rid_adherent, :rid_entree)";
		$requete = $this->bdd->prepare($sql);
		$requete->execute(array(
									'rid_adherent' 	=> $id_adherent,
									'rid_entree' 	=> $rid_entree,
								));
		return $donnees;		
	}
1
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
2 févr. 2016 à 14:13
Bonjour,

Tu vas devoir faire Autant de requêtes INSERT qu'il y a de table.
(tu ne peux pas le faire en une seule instruction)

Donc... tu fais l'insertion dans ta première table
Tu récupères l'ID qui a été créé (via l'instruction lastInsertId )
Tu t'en sers pour faire l'insertion dans ta seconde table...
puis Idem... avec ta troisième table.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
2 févr. 2016 à 15:39
Bonjour,
Merci de ton aide.
J'ai bien fait du moins je crois avoir fait ce que tu as dit, mais il y a quelque chose qui m'échappe en fait.
Lorsque je fait l'ajout d'un membre il y a aucun soucis mais l'ajout de la date ne ce fait pas.
	public function AjoutDateEntree() {
		$sql = "INSERT INTO tb_entree(debut, fin)
				VALUES(:debut, :fin)";
		$requete = $this->bdd->prepare($sql);
		$donnees = $requete->execute(array(
									'debut' => $this->debut,
									'fin' 	=> $this->fin,
									));
		
		$id_adherent = $this->bdd->lastInsertId();
		
		$sql = "INSERT INTO tb_adherent_tb_entree(rid_adherent, rid_entree)
				VALUES(:rid_adherent, :rid_entree)";
		$requete = $this->bdd->prepare($sql);
		$requete->execute(array(
									'rid_adherent' 	=> $id_adherent,
									'rid_entree' 	=> $this->rid_entree,
									));
		return $donnees;		
	}

Tu peux me donner ton avis s'il te plait, merci
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
2 févr. 2016 à 16:08
Le code me semble correct.
Il faudrait que tu fasses de PRINT_R de ton array de data pour voir si les valeurs sont bien présentes.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
2 févr. 2016 à 17:15
En fait je ne sais pas si c'est au niveau de l'organisation de mes fichiers qui ne vas pas.
J'ai un fichier de class pour mes fonctions "ajout membre"
un autre pour la class des fonctions "ajout entree"
un fichier avec mon formulaire qui fait appel à mes fonctions pour l'ajout des membres
et un fichier qui fait appel à mes fonctions pour l'ajout des dates
A ce niveau d'organisation je pense qu'il y a un problème.
T'en pense quoi?
Merci
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
2 févr. 2016 à 19:07
Si tu as deux CLASS différentes pour gérer séparément les membres et les entrées ....
il faut alors découper ta fonction AjoutDateEntree() en deux .
Une fonction dans ta class des membres => qui retourne l' ID créé
et Une fonction dans ta class des entrées qui aura en paramètre l' ID membre
Puis appeller les deux fonctions dans ton code principale.....
0