Insertion de variables fixes et conditionnées

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.
A voir également:

2 réponses

Utilisateur anonyme
 
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
0
Garen
 
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
0
Utilisateur anonyme
 
Vous utilisez quoi comme base de données et quelle version ?
0
Garen
 
Je ne suis pas sûr que ça réponde entièrement à votre question mais voici ce que j'ai comme info: MySQL 5.1.56-log

Et au cas où c'est utile: php 5.2.17 / Apache 2.2.19
0
Utilisateur anonyme
 
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 :

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.
0
Garen
 
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à.
0