INSERT et INNER JOIN dans une requête SQL
Résolu
Numbyscuit
Messages postés
18
Statut
Membre
-
A.Nonymous -
A.Nonymous -
Bonjour,
Dans le cadre de la création d'un site pour un projet scolaire, je rencontre un petit problème. En effet, je dois combiner les fonctions INNER JOIN et INSERT INTO, mais je ne sais comment m'y prendre. J'ai bien essayé quelque chose, mais PHP le compte comme une erreur :
La variable log correspond au pseudo stocké dans la session, et est une valeur unique de la BDD. Ainsi, je veux entrer une nouvelle adresse assignée à un membre en particulier.
Merci d'avance pour vous réponses.
Dans le cadre de la création d'un site pour un projet scolaire, je rencontre un petit problème. En effet, je dois combiner les fonctions INNER JOIN et INSERT INTO, mais je ne sais comment m'y prendre. J'ai bien essayé quelque chose, mais PHP le compte comme une erreur :
$add = $_POST['adress']; $ville = $_POST['ville']; $cp = $_POST['CP']; $pays = $_POST['pays']; /*Ne fonctionne pas*/ $reqAdd = $bdd->prepare(" INSERT INTO adresses(adresses.RueAdresse, adresses.CPAdresse, adresses.VilleAdresse, adresses.PaysAdresse) INNER JOIN avoir ON avoir.ID_Adresse = adresses.ID_Adresse INNER JOIN clients ON avoir.ID_Client = clients.ID_Client VALUES(:add, :cp, :ville, :pays) WHERE clients.PseudoClient = '". $log ."' "); $reqAdd->execute(array( 'add'=>$add, 'cp'=>$cp, 'ville'=>$ville, 'pays'=>$pays ));
La variable log correspond au pseudo stocké dans la session, et est une valeur unique de la BDD. Ainsi, je veux entrer une nouvelle adresse assignée à un membre en particulier.
Merci d'avance pour vous réponses.
A voir également:
- Insert with inner join
- Insert into inner join - Meilleures réponses
- Insert into select join - Meilleures réponses
- Touche insert - Guide
- Disk boot failure insert system disk and press enter - Guide
- Insert boot media in selected boot device and press a key ✓ - Forum Windows 10
- Activer touche insert sur ASUS UX32A - Forum Clavier
- Join pdf - Télécharger - PDF
7 réponses
J'ai bien essayé de décomposer la requête, mais je rencontre le même problème :
/*Ne fonctionne pas*/ $reqAdd = $bdd->prepare(" SELECT * FROM adresses INNER JOIN avoir ON avoir.ID_Adresse = adresses.ID_Adresse INNER JOIN clients ON avoir.ID_Client = clients.ID_Client "); $reqAdd = $bdd->prepare(" INSERT INTO adresses(adresses.RueAdresse, adresses.CPAdresse, adresses.VilleAdresse, adresses.PaysAdresse) VALUES(:add, :cp, :ville, :pays) WHERE clients.PseudoClient = '". $log ."' "); $reqAdd->execute(array( 'add'=>$add, 'cp'=>$cp, 'ville'=>$ville, 'pays'=>$pays ));
Ce n'est pas un problème de PHP, mais de SQL.
La syntaxe "INSERT INTO ... VALUES ... " ne peut inclure de jointures, ni de clause WHERE.
En revanche, "INSERT INTO ... SELECT ... " accepte jointures et clauses WHERE.
Ainsi
INSERT INTO tableA (champA, champB, champC)
SELECT NULL, client.id, 'nouvelle valeur'
FROM client
INNER JOIN tableB ON tableB.champD = client.champE
WHERE client.login = 'A.Nonymous'
Je ne comprends pas bien ce que tu veux faire de ton INSERT, je ne peux aider plus.
La syntaxe "INSERT INTO ... VALUES ... " ne peut inclure de jointures, ni de clause WHERE.
En revanche, "INSERT INTO ... SELECT ... " accepte jointures et clauses WHERE.
Ainsi
INSERT INTO tableA (champA, champB, champC)
SELECT NULL, client.id, 'nouvelle valeur'
FROM client
INNER JOIN tableB ON tableB.champD = client.champE
WHERE client.login = 'A.Nonymous'
Je ne comprends pas bien ce que tu veux faire de ton INSERT, je ne peux aider plus.
En fait, ici, trois tables entrent en jeu :
- La table adresses
- La table avoir (qui lie clients à adresses)
- La table clients
Cette requête a donc pour but d'ajouter une adresse à un client, en fonction de son pseudo unique dans la table client et stockée préalablement dans une session et assigné ici dans la variable $log.
En tout cas, merci, je vais essayer ta solution ^^
EDIT :
Et aussi, les valeurs $add, $ville, $cp, et $pays, destinée à être insérées comme valeurs dans la BDD, ont été définies plus tôt via un $_POST.
Re-EDIT : Hm, je dois mal m'y prendre, ça ne fonctionne pas x_x
En fait, si j'arrive bien à ajouter l'adresse en trifouillant, rien ne se passe dans la table "avoir", qui est justement censée relier ladite adresse au client.
- La table adresses
- La table avoir (qui lie clients à adresses)
- La table clients
Cette requête a donc pour but d'ajouter une adresse à un client, en fonction de son pseudo unique dans la table client et stockée préalablement dans une session et assigné ici dans la variable $log.
En tout cas, merci, je vais essayer ta solution ^^
EDIT :
Et aussi, les valeurs $add, $ville, $cp, et $pays, destinée à être insérées comme valeurs dans la BDD, ont été définies plus tôt via un $_POST.
Re-EDIT : Hm, je dois mal m'y prendre, ça ne fonctionne pas x_x
En fait, si j'arrive bien à ajouter l'adresse en trifouillant, rien ne se passe dans la table "avoir", qui est justement censée relier ladite adresse au client.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Désolé du double post, mais le problème est résolu. J'ai simplement décomposé le problème d'une autre manière :
$reqAdd = $bdd->prepare("INSERT INTO adresses (RueAdresse, CPAdresse, VilleAdresse, PaysAdresse) VALUES(:add, :cp, :ville, :pays) "); $reqAdd->execute(array( 'add'=>$add, 'cp'=>$cp, 'ville'=>$ville, 'pays'=>$pays )); $sqlId = $bdd->query(" SELECT ID_Client FROM clients WHERE PseudoClient = '". $log ."' "); $donneesId = $sqlId->fetch(); $idCli = $donneesId['ID_Client']; $sqlAdd = $bdd->query("SELECT adresses.ID_Adresse FROM adresses WHERE adresses.RueAdresse = '". $add ."' AND adresses.CPAdresse = '". $cp ."' AND adresses.VilleAdresse = '". $ville ."' AND adresses.PaysAdresse = '". $pays ."' "); $donneesAdd = $sqlAdd->fetch(); $idAdd = $donneesAdd['ID_Adresse']; $reqId = $bdd->prepare("INSERT INTO avoir (avoir.ID_Client, avoir.ID_Adresse) VALUES(:idCli, :idAdd) "); $reqId->execute(array( 'idCli'=>$idCli, 'idAdd'=>$idAdd ));
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' in C:\wamp\www\projet_web_3\site_marchand\newadress.php on line 140
( ! ) PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN avoir ON avoir.ID_Adresse = adresses.ID_Adresse INNER J' at line 2 in C:\wamp\www\projet_web_3\site_marchand\newadress.php on line 140
( ! ) PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN avoir ON avoir.ID_Adresse = adresses.ID_Adresse INNER J' at line 2 in C:\wamp\www\projet_web_3\site_marchand\newadress.php on line 140