Jump to content

Query per inserimento massivo di prodotti in una nuova categoria non di default


giuse

Recommended Posts

Salve, sto cercando un aiuto per la creazione di una query MySql che mi consentisse di inserire più articoli in una categoria.

le condizioni sono le seguenti:

Ho quasi 500 articoli che devono essere inseriti nella categoria "fai da te", questi articoli hanno già le loro categorie di default.

Fra i quasi 4000 articoli che ho nel mio catalogo, i (quasi) 500 articoli sopra citati da inserire nella categoria "fai da te" (ID 123) sono quelli che hanno una regola in "regole catalogo prezzi" con ID 20, 21 e 22.

Quindi quando un articolo e compreso in una delle "regole catalogo prezzi" che hanno come ID quelli indicati, questi articoli devo essere inseriti anche nella categoria con ID 123.

Grazie per l'aiuto

 

 

Link to comment
Share on other sites

Ciao, questa è la query per verificare quali sono i prodotti che verrebbero inseriti. Controlla sempre prima che i prodotti siano quelli corretti:
 

SELECT DISTINCT 
    p.id_product,
    p.reference,
    pl.name,
    COUNT(cp.id_category) as categorie_attuali,
    c.id_specific_price_rule
FROM ps_product p
INNER JOIN ps_product_lang pl ON p.id_product = pl.id_product
INNER JOIN ps_specific_price_rule_condition_group cg ON p.id_product = cg.id_item
INNER JOIN ps_specific_price_rule_condition c ON cg.id_specific_price_rule_condition_group = c.id_specific_price_rule_condition_group
LEFT JOIN ps_category_product cp ON p.id_product = cp.id_product
WHERE c.id_specific_price_rule IN (20, 21, 22)
AND NOT EXISTS (
    SELECT 1 
    FROM ps_category_product cp2 
    WHERE cp2.id_product = p.id_product 
    AND cp2.id_category = 123
)
GROUP BY p.id_product, p.reference, pl.name, c.id_specific_price_rule
ORDER BY p.id_product ASC;

Questa è la query vera e propria che inserisce:
 

INSERT INTO ps_category_product (id_category, id_product, position)
SELECT DISTINCT 
    123 as id_category,
    p.id_product,
    (SELECT COALESCE(MAX(position), 0) + 1 
     FROM ps_category_product 
     WHERE id_category = 123) as position
FROM ps_product p
INNER JOIN ps_specific_price_rule_condition_group cg ON p.id_product = cg.id_item
INNER JOIN ps_specific_price_rule_condition c ON cg.id_specific_price_rule_condition_group = c.id_specific_price_rule_condition_group
WHERE c.id_specific_price_rule IN (20, 21, 22)
AND NOT EXISTS (
    SELECT 1 
    FROM ps_category_product cp 
    WHERE cp.id_product = p.id_product 
    AND cp.id_category = 123
);

 

Ovviamente prima fai un backup del db e lavora sempre in stage. 

Se funziona sono 50€.

M.

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...