giuse Posted January 16 Share Posted January 16 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 More sharing options...
ziobudda Posted January 16 Share Posted January 16 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 More sharing options...
giuse Posted January 16 Author Share Posted January 16 Grazie per l'aiuto, non c'è l'avrei fatta da solo. Domanda inutile, ma non esiste nessun software che traduca una query letterale in una Sql? grazie. Link to comment Share on other sites More sharing options...
giuse Posted January 16 Author Share Posted January 16 non mi è chiaro questa stringa COUNT(cp.id_category) as categorie_attuali, categorie_attuali con cosa deve essere sostituito? Link to comment Share on other sites More sharing options...
giuse Posted January 16 Author Share Posted January 16 non ho ancora provato, ma forse è il risultato della query? Link to comment Share on other sites More sharing options...
ziobudda Posted January 16 Share Posted January 16 On 1/16/2025 at 12:31 PM, giuse said: Grazie per l'aiuto, non c'è l'avrei fatta da solo. Domanda inutile, ma non esiste nessun software che traduca una query letterale in una Sql? Expand Prova le intelligenze artificiali. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now