Jump to content

Requête SQL pour associer des articles entre eux


Recommended Posts

Bonjour

 

Je cherche à lier les articles entre eux via l'option "Accessoires" dans le back office (ps_accessory dans la base de données).

 

En gros j'ai une caractéristique (feature) appelée "Collection". Et j'aimerai que les produits partageant la même caractéristique soient les accessoires des uns et des autres.

 

Ca se passe dans la table ps_feature_product qui a 3 champs : id_feature,id_product,id_feature_value

L'ID de la caractéristique (feature) qui m'intéresse est le 2. 

 

J'ai pensé à quelque chose comme ça 

 

INSERT INTO pojs_accessory (id_product_1,id_product_2)
SELECT id_product,id_product
FROM pojs_feature_product
WHERE id_feature=2
GROUP BY id_feature_value
 
Ca ne marche évidemment pas.
Link to comment
Share on other sites

-- insert ignore into ps_accessories (id_product_1, id_product_2)
select fp1.id_product, fp2.id_product
from ps_feature_product fp1
inner join ps_feature_product fp2 on fp1.id_feature = fp2.id_feature and fp1.id_product != fp2.id_product
where fp1.id_feature = 2

Attention cette requête va générer le produit cartésien en nombre d'enregistrement dans la table ps_accessories donc N x (N - 1) enregistrements.

Link to comment
Share on other sites

Bonjour et merci !

 

Cette requête m'a bien lié les produits, mais indépendemment de leur caractéristique "collection". Chaque produit a tout le reste du catalogue en accessoire  :mellow: Il manquait juste une comparaison de leur valeur "id_feature_value". Mais c'est vrai que je ne l'avais pas du tout mis dans ma première requête.

 

Voila le code qui fonctionne bien : 

insert ignore into ps_accessory (id_product_1, id_product_2)
select fp1.id_product, fp2.id_product
from ps_feature_product fp1
inner join ps_feature_product fp2 on fp1.id_feature = fp2.id_feature and fp1.id_product != fp2.id_product
where fp1.id_feature = 2 and fp1.id_feature_value = fp2.id_feature_value

Merci pour ton aide doekia

Edited by alexper (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...