Insertion de variables fixes et conditionnées
Garen
-
Garen -
Garen -
EDIT: désolé pour le manque des saut de lignes, mais même en sautant plusieurs lignes il ne les prend pas en compte je ne sais pas pourquoi...
Bonjour à tous,
je suis en train de bloquer sur une commande sql, mais avant quelques petites explications:
2 tables sont en jeu
'tb_feature_product' avec id_feature / id_product / id_feature_value
'tb_product' avec une vingtaine de colonnes donc id_product et id_category_default
Ce que je souhaite c'est insérer des nouvelles lignes dans 'tb_feature_product' en imposant id_feature à 12 et id_feature_value à 96, et faire de id_product une valeur conditionnée, en gros ne prendre que celle où l'id_category_default = 2 (je ne sais pas si vous voyez ce que je veux dire, en gros fixer deux valeurs et conditionner la 3ème)
Voici mon code qui ne marche donc pas:
INSERT INTO tb_feature_product (id_feature, id_product, id_feature_value)
VALUE ('12', 'id_product', '96')
SELECT id_product
FROM tb_product
WHERE 'id_category_default' = 2
Je précise que je n'ai jamais appris le sql, je me forme sur le tas tant bien que mal.
J'ai essayé d'autres variantes mais aucune ne marche.
Voici une des variantes que j'ai tentée:
UPDATE tb_feature_product p
LEFT JOIN tb_product fp ON (p.id_product = fp.id_product)
INSERT INTO tb_feature_product p (p.id_feature, p.id_product, p.id_feature_value)
VALUE ('12', 'fp.id_product', '96')
SELECT fp.id_product
FROM tb_product fp
WHERE 'fp.id_category_default' = 2
Pouvez-vous m'éclairer? Puis-je imposer deux valeurs à écrire et conditionner une troisième à partir d'une autre table qui n'a pas la même structure?
Merci beaucoup pour vos éclairages, si j'y arrive ça m'aidera pour beaucoup de choses que je dois faire.
Garen.
Bonjour à tous,
je suis en train de bloquer sur une commande sql, mais avant quelques petites explications:
2 tables sont en jeu
'tb_feature_product' avec id_feature / id_product / id_feature_value
'tb_product' avec une vingtaine de colonnes donc id_product et id_category_default
Ce que je souhaite c'est insérer des nouvelles lignes dans 'tb_feature_product' en imposant id_feature à 12 et id_feature_value à 96, et faire de id_product une valeur conditionnée, en gros ne prendre que celle où l'id_category_default = 2 (je ne sais pas si vous voyez ce que je veux dire, en gros fixer deux valeurs et conditionner la 3ème)
Voici mon code qui ne marche donc pas:
INSERT INTO tb_feature_product (id_feature, id_product, id_feature_value)
VALUE ('12', 'id_product', '96')
SELECT id_product
FROM tb_product
WHERE 'id_category_default' = 2
Je précise que je n'ai jamais appris le sql, je me forme sur le tas tant bien que mal.
J'ai essayé d'autres variantes mais aucune ne marche.
Voici une des variantes que j'ai tentée:
UPDATE tb_feature_product p
LEFT JOIN tb_product fp ON (p.id_product = fp.id_product)
INSERT INTO tb_feature_product p (p.id_feature, p.id_product, p.id_feature_value)
VALUE ('12', 'fp.id_product', '96')
SELECT fp.id_product
FROM tb_product fp
WHERE 'fp.id_category_default' = 2
Pouvez-vous m'éclairer? Puis-je imposer deux valeurs à écrire et conditionner une troisième à partir d'une autre table qui n'a pas la même structure?
Merci beaucoup pour vos éclairages, si j'y arrive ça m'aidera pour beaucoup de choses que je dois faire.
Garen.
A voir également:
- Insertion de variables fixes et conditionnées
- Touche insertion clavier - Guide
- Insertion sommaire word - Guide
- Insertion filigrane word - Guide
- Insertion liste déroulante excel - Guide
- Insertion signature word - Guide
2 réponses
Bonjour,
Si j'ai bien compris vous voulez faire un insert, mais cet insert touche a deux tables.
Oups. Pas possible. Sauf en faisant une vue mais c'est déconseillé.
Si vous voulez mettre le id_product de la table tb_product en fonction de son id_category_default dans la table tb_feature_product
il va falloir faire
INSERT INTO tb_feature_product (id_feature, id_product, id_feature_value)
SELECT 12, id_produit, 96
FROM tb_product
WHERE id_category_default=2
ceci à condition de id_category_default=2 ne correspond qu'à un seul id_produit sinon vous allez insérer plusieurs lignes dans tb_feature_product
Mais je vous conseillerais bien avant de vous lancer là dedans de lire un bon tutorial de SQL, sinon vous allez ramer.
Cordialement
Si j'ai bien compris vous voulez faire un insert, mais cet insert touche a deux tables.
Oups. Pas possible. Sauf en faisant une vue mais c'est déconseillé.
Si vous voulez mettre le id_product de la table tb_product en fonction de son id_category_default dans la table tb_feature_product
il va falloir faire
INSERT INTO tb_feature_product (id_feature, id_product, id_feature_value)
SELECT 12, id_produit, 96
FROM tb_product
WHERE id_category_default=2
ceci à condition de id_category_default=2 ne correspond qu'à un seul id_produit sinon vous allez insérer plusieurs lignes dans tb_feature_product
Mais je vous conseillerais bien avant de vous lancer là dedans de lire un bon tutorial de SQL, sinon vous allez ramer.
Cordialement
Merci à vous pour votre réponse.
En effet je souhaite faire un insert dans une table de plusieurs lignes d'un coup, selon une condition qui est dans une deuxième table. Justement id_category_default = 2 correspond à plein de id_product, c'est pour cela que je cherche à le faire de manière globale plutôt que de la faire individuellement de manière manuelle (et donc très longues car cela concerne des centaines de produits).
J'ai essayé le code que vous m'avez donné, j'ai eu cette erreur sql:
#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 'FROM tb_product WHERE id_category_default = 2' at line 3
Je ne sais pas si ça vous inspire quelque chose? Il me parle de syntaxe j'ai donc essayé avec plusieurs variantes mais même nature d'erreur.
C'est sûr qu'un bon cours ou une formation en sql ne me ferait pas de mal ;)
Cordialement
En effet je souhaite faire un insert dans une table de plusieurs lignes d'un coup, selon une condition qui est dans une deuxième table. Justement id_category_default = 2 correspond à plein de id_product, c'est pour cela que je cherche à le faire de manière globale plutôt que de la faire individuellement de manière manuelle (et donc très longues car cela concerne des centaines de produits).
J'ai essayé le code que vous m'avez donné, j'ai eu cette erreur sql:
#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 'FROM tb_product WHERE id_category_default = 2' at line 3
Je ne sais pas si ça vous inspire quelque chose? Il me parle de syntaxe j'ai donc essayé avec plusieurs variantes mais même nature d'erreur.
C'est sûr qu'un bon cours ou une formation en sql ne me ferait pas de mal ;)
Cordialement
Désolé, pour moi il y a pas raison qu'il y aie une erreur avec cette version.
Pour plus de sécurité j'ai fait le test suivant :
insert into a (id, a, ma) select 1,a,2 from b where cat=2
avec les tables suivantes :
Ca fonctionne très bien.
Pour plus de sécurité j'ai fait le test suivant :
insert into a (id, a, ma) select 1,a,2 from b where cat=2
avec les tables suivantes :
CREATE TABLE IF NOT EXISTS 'a' ( 'id' int(11) NOT NULL, 'a' varchar(10) NOT NULL, 'ma' int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS 'b' ( 'a' varchar(10) NOT NULL, 'cat' int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Contenu de la table 'b' -- INSERT INTO 'b' ('a', 'cat') VALUES ('aa', 2), ('bb', 2);
Ca fonctionne très bien.
Merci pour le temps que vous avez pris là-dessus.
Pour votre test vous retombez donc sur mon code original, mais qui me fait toujours le même problème quelle que soient les variantes utilisées...Je ne vois plus trop de solutions là.
Je me demande si l'erreur ne viendrait pas du fait que certaines lignes potebtiellement créées par l'insert into existerait déjà.
Pour votre test vous retombez donc sur mon code original, mais qui me fait toujours le même problème quelle que soient les variantes utilisées...Je ne vois plus trop de solutions là.
Je me demande si l'erreur ne viendrait pas du fait que certaines lignes potebtiellement créées par l'insert into existerait déjà.