Page 1 sur 1

[Problème] INSERT INTO SELECT WHERE

Posté : 18 juin 2019, 16:38
par elvyn
Bonjour,
Le truc est simple, je souhaiterai avoir la bonne syntaxe de cette requête
$req = $bdd->prepare('INSERT INTO cheval (?, '.$_GET['id'].') SELECT (com, id_nom)  WHERE id_nom = '.$_GET['id']);

Re: [Problème] INSERT INTO SELECT WHERE

Posté : 18 juin 2019, 16:49
par or 1
il manque le from pour le select
après, il faudrait le détail des tables pour en dire plus.

Re: [Problème] INSERT INTO SELECT WHERE

Posté : 18 juin 2019, 16:56
par elvyn
BDD
Table : cheval
Colonne 1 : id
Colonne 2 : com
Colonne 3 : id_nom
Le FROM ne change rien ^^ Peut-être l'ai-je mal écrit ?
$req = $bdd->prepare('INSERT INTO cheval (?, '.$_POST['id'].') SELECT (com, id_nom) FROM cheval WHERE id_nom = '.$_POST['id']);
Oui y'a eu un changement GET to POST mais cela n'a pas d'importance np

Re: [Problème] INSERT INTO SELECT WHERE

Posté : 18 juin 2019, 17:26
par Saian
Salut, peut être simplement enlève les parenthèses au niveau des colonnes du SELECT et nomme les 2 colonnes dans le INSERT.
https://www.w3schools.com/sql/sql_inser ... select.asp

INSERT INTO cheval (com, id_nom) SELECT com, id_nom FROM cheval WHERE id_nom = :id_nom

Mais c'est quand même bizarre tu fais un INSERT d'un SELECT de la même table... je vois pas bien ce que tu comptes faire avec ça. Ca n'a pas de sens. :mrgreen:

Soit le SELECT retourne des lignes mais elles sont déjà dedans, tu vas juste les dupliquer. Soit il ne retourne rien et ça n’insérera rien...

Re: [Problème] INSERT INTO SELECT WHERE

Posté : 19 juin 2019, 14:27
par elvyn
Le but est de créer une zone de commentaires à partir d'une page sélectionnée au préalable. J'ai donc besoin de récupérer le même id que la page précédente pour ainsi l'insérer dans l'autre table (cheval) ou se trouve aussi les commentaires.
Effectivement mon programme fonctionne maintenant mais comme tu le dis, les données se dupliquent, comment résoudre ce problème ?
$req = $bdd->prepare('INSERT INTO cheval (com, id_nom) SELECT ?, '.$_POST['id'].' FROM cheval WHERE id_nom = '.$_POST['id']);
$req->execute(array($_POST['com']));

Re: [Problème] INSERT INTO SELECT WHERE

Posté : 19 juin 2019, 20:04
par or 1
la syntaxe classique d'un insert, c'est :
insert into cheval (com, id_nom) values (?, ?)
on utilise un select que dans certains cas, pas dans ce contexte.

Re: [Problème] INSERT INTO SELECT WHERE

Posté : 19 juin 2019, 20:11
par Saian
Je croyais avoir répondu à ton dernier message mais j'ai du zapper d'envoyer la réponse.

Je te disais que je n'étais pas sûr de comprendre mais que si tu veux copier les données d'une table à une autre tu dois donc avoir 2 tables avec des noms différents et dans ce cas tu mets le nom de la table cible dans l'INSERT et le nom de la table source dans le SELECT.

Par contre ton code ne semble toujours pas logique. Ca devrait plutôt être, avec une table cheval_1 comme source et une table cheval_2 comme cible, de la forme :
$req = $bdd->prepare('INSERT INTO cheval_2 (com, id_nom) SELECT com, id_nom FROM cheval_1 WHERE com = ? AND id_nom = ?');
$req->execute(array($_POST['com'], $_POST['id']));

Mais ça reste un peu étrange, l'énoncé de ton problème est trop vague.

Re: [Problème] INSERT INTO SELECT WHERE

Posté : 20 juin 2019, 09:33
par elvyn
Ok très bien, problème résolu, je ne sais pas pourquoi je voulais mettre ce WHERE qui ne servait à rien ici ^^
Merci pour vos réponses !