Jump to content

Comment faire pour remplir le champ supplier_reference avec la valeur de deux autres champs


Recommended Posts

Bonjour,

 

J'ai un gros souci sur une site en production. L'on me demande de remplir le champ supplier_reference avec la valeur de deux autres champs.

 

Dans un premier temps, j'ai ajouté un champ supplémentaire en fin de table, puis fait la requête suivante sur une base de test avec les vraies données d'un fabricant.

SELECT `id_product`, `id_supplier`, `id_manufacturer`, `id_category_default`, `id_shop_default`, `on_sale`, `online_only`, `ean13`, `upc`, `ecotax`, `quantity`, `minimal_quantity`, `price`, `wholesale_price`, `unity`, `unit_price_ratio`, `additional_shipping_cost`, `reference`, `supplier_reference`, `location`, `width`, `height`, `depth`, `weight`, `out_of_stock`, `quantity_discount`, `customizable`, `uploadable_files`, `text_fields`, `active`, `redirect_type`, `id_product_redirected`, `available_for_order`, `available_date`, `condition`, `show_price`, `indexed`, `visibility`, `cache_is_pack`, `cache_has_attachments`, `is_virtual`, `cache_default_attribute`, `date_add`, `date_upd`, `advanced_stock_management`, `id_tax_rules_group`, `pack_stock_type`, `abreviationmanufact`
FROM `ps_product`
WHERE id_manufacturer = "22"
AND supplier_reference = CONCAT( abreviationmanufact, reference )

J'ai bien le résultat excellent. sauf que cela n'a renvoyé que 50 références au lieu des 3077 lignes si je fais simplement ceci :

SELECT * 
FROM  `ps_product` 
WHERE  `id_manufacturer` =22

Une ligne d'exemple du résultat

INSERT INTO `ps_product` (`id_product`, `id_supplier`, `id_manufacturer`, `id_category_default`, `id_shop_default`, `on_sale`, `online_only`, `ean13`, `upc`, `ecotax`, `quantity`, `minimal_quantity`, `price`, `wholesale_price`, `unity`, `unit_price_ratio`, `additional_shipping_cost`, `reference`, `supplier_reference`, `location`, `width`, `height`, `depth`, `weight`, `out_of_stock`, `quantity_discount`, `customizable`, `uploadable_files`, `text_fields`, `active`, `redirect_type`, `id_product_redirected`, `available_for_order`, `available_date`, `condition`, `show_price`, `indexed`, `visibility`, `cache_is_pack`, `cache_has_attachments`, `is_virtual`, `cache_default_attribute`, `date_add`, `date_upd`, `advanced_stock_management`, `id_tax_rules_group`, `pack_stock_type`, `abreviationmanufact`) VALUES
(214, 1, 22, 300024, 1, 0, 0, '0', '', 0.000000, 0, 1, 342.400000, 0.000000, '', 0.000000, 0.00, 'B1-CSR5', 'B1-CSR5', '', 0.000000, 0.000000, 0.000000, 0.000000, 2, 0, 0, 0, 0, 1, '404', 0, 1, '0000-00-00', 'new', 1, 1, 'both', 0, 0, 0, 0, '2012-01-19 18:24:13', '2016-01-05 18:17:59', 0, 1, 3, ''),
 

Le souci, c'est comment faire pour faire l'update, en sachant que l'update ne peut être fait que sur une ligne ?

 

avec cette commande qui d’ailleurs ne fonctionne pas :

UPDATE `ps_product` SET `supplier_reference'= "MFS1-KZV09-BK" WHERE id_product="172"

#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 '' at line 1

Oups la correction de la requête update pour prestashop :

UPDATE `pamracing`.`ps_product` SET `supplier_reference` = "MFS1-KZV09-BK" WHERE `ps_product`.`id_product` = 172; 

Pour le moment, j'ai fais un export en csv pour excel, et j'utilise la vielle méthode pour créer les requêtes dans un fichier excel.

 

Merci de vos lumières

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

Si tu mélange les type d'apostrophes ça ne peux pas marcher :D

 

Pourquoi re-remplir la colonne supplier_reference qui a été obsolété depuis les versions 1.5 en passant maintenant pas la table product supplier?

Link to comment
Share on other sites

Merci de votre réponse. Mon maître de stage me demande de faire cette action.

 

Auriez-vous une référence dans la doc que je puisse lui montrer.

 

De toute façon, j'ai réussi à trouver la bonne requête. J'ai mis à jour près de 100000 lignes et il est venu me voir il y a deux jours en me disant que je n'avais rien fait. Et pour cause il utilise le module storeCommander qui ne prend en compte que ce qu'il écrit dans la BDD, et cerise sur le gâteau, ils refusent d'utiliser la gestion de stock avancée qui est la seule à faire apparaître ce fameux champ supplier_reference.

 

 Pour faire l'update de ce fameux champ, d'abord un concat pour avoir la bonne référence supplier_référence :

SELECT  `id_product` , CONCAT(  `abreviationmanufact` ,  `reference` ) 
FROM  `ps_product` 
WHERE  `id_manufacturer` =  "56"

puis l'envoi de la requête update vers la BDD.

 

Ma requête update modifiée :

UPDATE `pamracing`.`ps_product` SET `supplier_reference` = 'MHK2-D' WHERE `ps_product`.`id_product`= '67';
Link to comment
Share on other sites

supplier_reference n'est plus rempli/lu ce qui explique pourquoi storecommander ne voit pas ta modif (qui est dans la BDD ou j'ai rien compris)

exact pour les stocks avancés mais ça ne concerne pas ce champs je répète inutilisé.

Tu n'as pas besoin d'une doc pour te confirmer que tes yeux voient que ce n'est pas utilisé si?

De toute manière avec prestashop la doc ça n'existe pas.

Regarde Product::addSupplierReference()

 

PS: tu aurais pu écrire tout en une seule requête

Link to comment
Share on other sites

Merci beaucoup pour ta réponse. Par curiosité, elle aurait été comment cette requête ?

 

Bon, j'ai retourné StoreCommander de tous cotés. En fait l'entreprise a sous les yeux ce quelle cherche depuis plus de 2 ans. Maintenant, faut que la société qui maintient Sage ligne 100 veille bien nous faire un "Cube" qui n'était pas prévu dans le contrat initial, pour que je puisse extraire les données avec la gestion piloté.

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