INSERT et INNER JOIN dans une requête SQL
Résolu
Numbyscuit
Messages postés
18
Date d'inscription
Statut
Membre
Dernière intervention
-
A.Nonymous -
A.Nonymous -
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
- Girl i want to be with you ✓ - Forum Musique / Radio / Clip
- 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