Jump to content
epic1110

[ASTUCE] Generer automatiquement vos fichiers CSV via requete SQL

Recommended Posts

Bonjour à tous,

une petite contribution pour créer vos fichiers CSV automatiquement, conformément au formatage des fichiers d'imports exemple de la fonction d'importation de Prestashop.

Pour le moment voici les requêtes pour exporter et créer vos csv pour les adresses, les catégories, les clients, les fournisseurs et les fabricants.

 

Si un expert en requetes sql réussi à poster sur ce topic les requetes permettant d'exporter et de creer les csv pour les produits et pour les combinaisons de produits (attributs,...) conformément à la fonction d'import de prestashop, alors ce topic sera complet.

 

PhPMyAdmin sera utilisé pour executer les requetes sql dans ce tuto, avec le préfixe de base de donnée par défaut de prestashop, c'est à dire "ps_".

 

ATTENTION: Pensez à sauvegarder votre base de donnée avant toute manipulation.

 

Dans PHPMyAdmin séléctionnez votre base de donnée et cliquez sur l'onglet "SQL"

Copier coller le code ci-dessous correspondant au fichier CSV que vous voulez générer.

Une fois coller, cliquez sur "Executer", vous obtenez votre résultat de requête.

Descendez en bas de ce résultat, dans la fenetre "Opérations sur les résultats de la requête",

cliquez sur le bouton "Exporter" et choisissez "personnalisée",

Lignes: "Exporter toutes les lignes",

Sortie: ne touchez à rien, encodage déja en UTF-8

Format: Choisissez CSV et pour "Colonnes séparées par :" choisissez le " ; "

Vous pouvez si vous le souhaiter Afficher les noms de colonnes en première ligne, il faudra penser dans prestashop à ne pas importer la premiere ligne.

Sinon dans la fonction d'import de prestashop ne rien toucher tout est conforme.

Bien penser à choisir tout de même la bonne entité correspondant au bon CSV.

 

Voici donc les requetes SQL:

 

Création du fichier CSV pour récuperer vos adresses:

SELECT
ps_address.id_address,
ps_address.alias,
ps_address.active,
ps_customer.email,
ps_manufacturer.`name` AS Manufacturer,
ps_supplier.`name` AS Supplier,
ps_address.company,
ps_address.lastname,
ps_address.firstname,
ps_address.address1,
ps_address.address2,
ps_address.postcode,
ps_address.city,
ps_country_lang.`name` AS Country,
ps_state.`name` AS State,
ps_address.other,
ps_address.phone,
ps_address.phone_mobile,
ps_address.vat_number
FROM
ps_address
LEFT JOIN ps_customer ON ps_customer.id_customer = ps_address.id_customer
LEFT JOIN ps_manufacturer ON ps_manufacturer.id_manufacturer = ps_address.id_manufacturer
LEFT JOIN ps_supplier ON ps_supplier.id_supplier = ps_address.id_supplier
LEFT JOIN ps_country_lang ON ps_country_lang.id_country = ps_address.id_country
LEFT JOIN ps_state ON ps_state.id_state = ps_address.id_state

 

Création du fichier CSV pour récuperer vos catégories:

SELECT
ps_category.id_category,
ps_category.active,
`Name Category`.`name` AS `Name`,
`Name Parent`.`name` AS Parent,
`Name Category`.description,
`Name Category`.meta_title,
`Name Category`.meta_keywords,
`Name Category`.meta_description,
`Name Category`.link_rewrite
FROM
ps_category
LEFT JOIN ps_category_lang AS `Name Category` ON `Name Category`.id_category = ps_category.id_category
LEFT JOIN ps_category_lang AS `Name Parent` ON `Name Parent`.id_category = ps_category.id_parent

 

 

Création du fichier CSV pour récuperer vos clients:

SELECT
ps_customer.id_customer,
ps_customer.active,
ps_customer.id_gender,
ps_customer.email,
ps_customer.passwd,
ps_customer.birthday,
ps_customer.lastname,
ps_customer.firstname,
ps_customer.newsletter,
ps_customer.optin
FROM
ps_customer

 

Création du fichier CSV pour récuperer vos fabricants:

SELECT
ps_manufacturer.id_manufacturer,
ps_manufacturer.active,
ps_manufacturer.`name`,
ps_manufacturer_lang.description,
ps_manufacturer_lang.short_description,
ps_manufacturer_lang.meta_title,
ps_manufacturer_lang.meta_keywords,
ps_manufacturer_lang.meta_description
FROM
ps_manufacturer
LEFT JOIN ps_manufacturer_lang ON ps_manufacturer_lang.id_manufacturer = ps_manufacturer.id_manufacturer

 

Création du fichier CSV pour récuperer vos fournisseurs: (hors colonne "Short description")

SELECT
ps_supplier.id_supplier,
ps_supplier.active,
ps_supplier.`name`,
ps_supplier_lang.description,
ps_supplier_lang.meta_title,
ps_supplier_lang.meta_keywords,
ps_supplier_lang.meta_description
FROM
ps_supplier
LEFT JOIN ps_supplier_lang ON ps_supplier_lang.id_supplier = ps_supplier.id_supplier

 

Ce topic peut bienventendu être optimisé, amélioré, modifié.

Je ne suis pas au niveau de certains sur le forum, qui sont surement plus expert en la matière et seront optimiser ce contenu. Sachant qu'il n'existe pour le moment, malheureusement, pas de fonction d'export directement dans Prestashop de toutes ces données en fichiers CSV. (Certains modules existent certes, mais pas pour la totalité des fichiers d'import CSV de prestashop, et sinon, pas OpenSource)

Peut être qu'une fonction d'export en CSV est déja prévue dans la 1.5 ? Je ne sais pas.

  • Like 11

Share this post


Link to post
Share on other sites

Bonjour,

Si des personnes ont un retour à faire, des améliorations à apporter, n'hésitez pas !

Cordialement

  • Like 1

Share this post


Link to post
Share on other sites

Merci epic1110 !

Import clients de la version 1.3.7 vers 1.4.6 en 3 minutes.. !

 

Cette astuce me plaît vraiment :)

Beaucoup plus propre que les modules payants.

Share this post


Link to post
Share on other sites

Salut à tous.

 

Merci @Epic1110 pour cette contribution, j'ai fait le test pour les catégories sur un prestashop 1.4.7.2, ça marche au poil :D .

 

Pour ceux que ça peut aider, voici la syntaxe du fichier .csv à utiliser avec la fonction import de prestashop pour créer la catégorie "categorie test" :

 

"id_category";"active";"Name";"Parent";"description";"meta_title";"meta_keywords";"meta_description";"link_rewrite"

"2";"1";"categorie test";"1";"description de la categorie";"title categorie";"meta keywords";"meta description";"categorie-test"

 

@+

  • Like 1

Share this post


Link to post
Share on other sites

Ce tuto est supper merci beaucoup tres beau travail.

Par contre pour les produits si quelqu'un savait ce serait vraiment cool.

Edited by silco (see edit history)

Share this post


Link to post
Share on other sites

merci pour ces infos :), et toujours pas de nouvelle pour le csv produit?

Share this post


Link to post
Share on other sites

oui un CSV produit avec déclinaisons serait top ! mais ca doit être bien complexe !

  • Like 1

Share this post


Link to post
Share on other sites

Bonjour à tous,

J'ai un "petit" bug, ma base me dit : "#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 ps_address LEFT JOIN ps_customer ON ps_customer.id_customer = ps_address.id' at line 20"

Je suis sur phpMyAdmin 3.4.9

Serveur web :

  • Apache/2.2.16 (Debian)
  • Version du client MySQL: 5.1.49
  • Extension PHP: mysqli

MySql :

  • Serveur: sql5 (sql5 via TCP/IP)
  • Version du serveur: 5.0.92-87
  • Version du protocole: 10
  • Utilisateur: maternehaegelin@10.5.1.3
  • Jeu de caractères pour MySQL: UTF-8 Unicode (utf8)

Pouvez-vous m'aider ?

 

Merci

Share this post


Link to post
Share on other sites

Pour les produits, (pour moi ça me suffit) :

 


SELECT DISTINCT
ps_product.id_product AS 'id_produit',            
ps_product.reference AS 'reference',
ps_product.supplier_reference AS 'reference fournisseur',
ps_product_lang.name AS 'designation' ,
ps_product.id_category_default AS 'categorie par defaut',
ps_manufacturer.name AS 'marque',
ps_product.price AS 'prix_ht',
ps_product_lang.description_short AS 'resume',
ps_product_lang.description AS 'Description',
ps_product.quantity AS 'quantite',
ps_product.active AS 'Actif (0.1)'


FROM ps_product

LEFT JOIN ( ps_category_product, ps_product_lang, ps_manufacturer)

ON (	 	
ps_product.id_product = ps_category_product.id_product AND
ps_product.id_product=ps_product_lang.id_product AND
ps_product.id_product=ps_product_lang.id_product AND
ps_product.id_product = ps_category_product.id_product  AND
ps_product.id_manufacturer = ps_manufacturer.id_manufacturer
)

Edited by yZ0 (see edit history)

Share this post


Link to post
Share on other sites

Bonjour,

merci à toi pour cette contribution yZ0, je vais tester cela de ce pas.

Cordialement

Share this post


Link to post
Share on other sites

Pour les produits, (pour moi ça me suffit) :

 


SELECT DISTINCT
ps_product.id_product AS 'id_produit',			
ps_product.reference AS 'reference',
ps_product.supplier_reference AS 'reference fournisseur',
ps_product_lang.name AS 'designation' ,
ps_product.id_category_default AS 'categorie par defaut',
ps_manufacturer.name AS 'marque',
ps_product.price AS 'prix_ht',
ps_product_lang.description_short AS 'resume',
ps_product_lang.description AS 'Description',
ps_product.quantity AS 'quantite',
ps_product.active AS 'Actif (0.1)'


FROM ps_product

LEFT JOIN ( ps_category_product, ps_product_lang, ps_manufacturer)

ON (	 	
ps_product.id_product = ps_category_product.id_product AND
ps_product.id_product=ps_product_lang.id_product AND
ps_product.id_product=ps_product_lang.id_product AND
ps_product.id_product = ps_category_product.id_product  AND
ps_product.id_manufacturer = ps_manufacturer.id_manufacturer
)

 

Bonjour,

 

Je me suis inspiré de votre requête SQL pour la compléter afin qu'elle corresponde parfaitement au fichier csv de Prestashop.

Le problème c'est que ma requête ne fonctionne pas et je ne sais pas trop pourquoi, n'étant pas spécialiste en SQL.

 

Est-ce que quelqu'un pourrait y jeter un coup d'oeil et me dire ce qui ne va pas ?

 

Par rapport au fichier csv de Prestashop 1.4.9, j'ai seulement retiré les colonnes "Feature:Height" et "Feature:Battery Life" qui correspondent à priori aux caractéristiques du produit.

 

J'aimerais aussi inclure ces caractéristiques mais bon faut déjà corriger la requête SQL sans ces caractéristiques.

 

Merci d'avance.

 

Voici la requête SQL:

SELECT DISTINCT
ps_product.id_product AS 'id',
ps_product.active AS 'Actif (0.1)',
ps_product_lang.name AS 'Name*',
'' AS 'Categories (x,y,z,...)',
ps_product.price AS 'Price tax excl.',
ps_product.id_tax_rules_group AS 'Tax rules id',
ps_product.wholesale_price AS 'Wholesale price',
ps_product.on_sale AS 'On sale (0/1)',
ps_specific_price.reduction AS 'Discount amount',
ps_specific_price.reduction AS 'Discount percent',
ps_specific_price.from AS 'Discount from (yyy-mm-dd)',
ps_specific_price.to AS 'Discount to (yyy-mm-dd)',
ps_product.reference AS 'Reference #',
ps_product.supplier_reference AS 'Supplier reference #',
ps_supplier.name AS 'Supplier',
ps_manufacturer.name AS 'Manufacturer',
ps_product.ean13 AS 'EAN13',
ps_product.upc AS 'UPC',
ps_product.ecotax AS 'Ecotax',
ps_product.weight AS 'Weight',
ps_product.quantity AS 'Quantity',
ps_product_lang.description_short AS 'Short description',
ps_product_lang.description AS 'Description',
ps_tag.name AS 'Tags (x,y,z,...)',
ps_product_lang.meta_title AS 'Meta-title',
ps_product_lang.meta_keywords AS 'Meta-keywords',
ps_product_lang.meta_description AS 'Meta-description',
ps_product_lang.link_rewrite AS 'URL rewritten',
ps_product_lang.available_now AS 'Text when in-stock',
ps_product_lang.available_later AS 'Text if back-order allowed',
ps_product.available_for_order AS 'Available for order',
ps_product.date_add AS 'Date add product',
ps_product.show_price AS 'Show price',
'' as 'Image URLs (x,y,z,...)',
ps_product.online_only AS 'Only available online',
0 as 'Delete existing images (0 = no, 1 = yes)',
ps_product.condition AS 'Condition'
FROM ps_product
LEFT JOIN ( ps_category_product, ps_product_lang, ps_manufacturer, ps_specific_price, ps_supplier, ps_product_tag, ps_tag)
ON (		   
ps_product.id_product = ps_category_product.id_product AND
ps_product.id_product = ps_product_lang.id_product AND
ps_product.id_manufacturer = ps_manufacturer.id_manufacturer AND
ps_product.id_product = ps_specific_price.id_product AND
ps_product.id_supplier = ps_supplier.id_supplier AND
ps_product_tag.id_product = ps_product_tag.id_product AND
ps_tag.id_tag = ps_tag.id_tag
)
WHERE
ps_product_lang.id_lang = 2 AND
ps_tag.id_lang = 2

Share this post


Link to post
Share on other sites

Bonjour,

 

Je me suis inspiré de votre requête SQL pour la compléter afin qu'elle corresponde parfaitement au fichier csv de Prestashop.

Le problème c'est que ma requête ne fonctionne pas et je ne sais pas trop pourquoi, n'étant pas spécialiste en SQL.

 

Est-ce que quelqu'un pourrait y jeter un coup d'oeil et me dire ce qui ne va pas ?

 

Par rapport au fichier csv de Prestashop 1.4.9, j'ai seulement retiré les colonnes "Feature:Height" et "Feature:Battery Life" qui correspondent à priori aux caractéristiques du produit.

 

J'aimerais aussi inclure ces caractéristiques mais bon faut déjà corriger la requête SQL sans ces caractéristiques.

 

Merci d'avance.

 

Voici la requête SQL:

SELECT DISTINCT
ps_product.id_product AS 'id',
ps_product.active AS 'Actif (0.1)',
ps_product_lang.name AS 'Name*',
'' AS 'Categories (x,y,z,...)',
ps_product.price AS 'Price tax excl.',
ps_product.id_tax_rules_group AS 'Tax rules id',
ps_product.wholesale_price AS 'Wholesale price',
ps_product.on_sale AS 'On sale (0/1)',
ps_specific_price.reduction AS 'Discount amount',
ps_specific_price.reduction AS 'Discount percent',
ps_specific_price.from AS 'Discount from (yyy-mm-dd)',
ps_specific_price.to AS 'Discount to (yyy-mm-dd)',
ps_product.reference AS 'Reference #',
ps_product.supplier_reference AS 'Supplier reference #',
ps_supplier.name AS 'Supplier',
ps_manufacturer.name AS 'Manufacturer',
ps_product.ean13 AS 'EAN13',
ps_product.upc AS 'UPC',
ps_product.ecotax AS 'Ecotax',
ps_product.weight AS 'Weight',
ps_product.quantity AS 'Quantity',
ps_product_lang.description_short AS 'Short description',
ps_product_lang.description AS 'Description',
ps_tag.name AS 'Tags (x,y,z,...)',
ps_product_lang.meta_title AS 'Meta-title',
ps_product_lang.meta_keywords AS 'Meta-keywords',
ps_product_lang.meta_description AS 'Meta-description',
ps_product_lang.link_rewrite AS 'URL rewritten',
ps_product_lang.available_now AS 'Text when in-stock',
ps_product_lang.available_later AS 'Text if back-order allowed',
ps_product.available_for_order AS 'Available for order',
ps_product.date_add AS 'Date add product',
ps_product.show_price AS 'Show price',
'' as 'Image URLs (x,y,z,...)',
ps_product.online_only AS 'Only available online',
0 as 'Delete existing images (0 = no, 1 = yes)',
ps_product.condition AS 'Condition'
FROM ps_product
LEFT JOIN ( ps_category_product, ps_product_lang, ps_manufacturer, ps_specific_price, ps_supplier, ps_product_tag, ps_tag)
ON (		  
ps_product.id_product = ps_category_product.id_product AND
ps_product.id_product = ps_product_lang.id_product AND
ps_product.id_manufacturer = ps_manufacturer.id_manufacturer AND
ps_product.id_product = ps_specific_price.id_product AND
ps_product.id_supplier = ps_supplier.id_supplier AND
ps_product_tag.id_product = ps_product_tag.id_product AND
ps_tag.id_tag = ps_tag.id_tag
)
WHERE
ps_product_lang.id_lang = 2 AND
ps_tag.id_lang = 2

 

J'ai modifié ma requête SQL pour le rendre plus clair.

Cela fonctionne sauf pour les Tags que je ne sais pas comment récupérer avec un jointure.

 

A oui, sinon j'ai id_lang = 2 car dans mon cas ça correspond à l'id de la langue française et je ne souhaite récupérer que les données en français.

 

Requête modifiée:

SELECT DISTINCT

ps_product.id_product AS 'id',
ps_product.active AS 'Actif (0.1)',
ps_product_lang.name AS 'Name*',
'' AS 'Categories (x,y,z,...)',
ps_product.price AS 'Price tax excl.',
ps_product.id_tax_rules_group AS 'Tax rules id',
ps_product.wholesale_price AS 'Wholesale price',
ps_product.on_sale AS 'On sale (0/1)',
ps_specific_price.reduction AS 'Discount amount',
ps_specific_price.reduction AS 'Discount percent',
ps_specific_price.from AS 'Discount from (yyy-mm-dd)',
ps_specific_price.to AS 'Discount to (yyy-mm-dd)',
ps_product.reference AS 'Reference #',
ps_product.supplier_reference AS 'Supplier reference #',
ps_supplier.name AS 'Supplier',
ps_manufacturer.name AS 'Manufacturer',
ps_product.ean13 AS 'EAN13',
ps_product.upc AS 'UPC',
ps_product.ecotax AS 'Ecotax',
ps_product.weight AS 'Weight',
ps_product.quantity AS 'Quantity',
ps_product_lang.description_short AS 'Short description',
ps_product_lang.description AS 'Description',
ps_tag.name AS 'Tags (x,y,z,...)',
ps_product_lang.meta_title AS 'Meta-title',
ps_product_lang.meta_keywords AS 'Meta-keywords',
ps_product_lang.meta_description AS 'Meta-description',
ps_product_lang.link_rewrite AS 'URL rewritten',
ps_product_lang.available_now AS 'Text when in-stock',
ps_product_lang.available_later AS 'Text if back-order allowed',
ps_product.available_for_order AS 'Available for order',
ps_product.date_add AS 'Date add product',
ps_product.show_price AS 'Show price',
'' AS 'Image URLs (x,y,z,...)',
ps_product.online_only AS 'Only available online',
0 AS 'Delete existing images (0 = no, 1 = yes)',
ps_product.condition AS 'Condition'

FROM ps_product, ps_tag

LEFT OUTER JOIN ps_product_lang
ON ps_product.id_product = ps_product_lang.id_product AND ps_product_lang.id_lang = 2

LEFT OUTER JOIN ps_manufacturer
ON ps_product.id_manufacturer = ps_manufacturer.id_manufacturer

LEFT OUTER JOIN ps_specific_price
ON ps_product.id_product = ps_specific_price.id_product

LEFT OUTER JOIN ps_supplier
ON ps_product.id_supplier = ps_supplier.id_supplier

LEFT OUTER JOIN ps_product_tag
ON ps_product.id_product = ps_product_tag.id_product AND ps_tag.id_tag = ps_product_tag.id_tag AND ps_tag.id_lang = 2

Edited by Fafa59 (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

Bonjour,

 

J'ai testé pour l'export et 'import de la table client, tout ce passe bien cependant les mots de passes de mes clients ont changés, je n'arrive pas a me connecter et j ai une erreur d'authentification. En vérifiant les tables entre l'export et l'import le code password a changé. Pourquoi ?

 

Je précise que j exporte de la version 1.4.3 vers import sur 1.5

Share this post


Link to post
Share on other sites

Bonjour Cyrkam

Les mots de passes sont hashés via une clé de cookie (ces clés sont dans le fichier settings.inc.php).

Lorsque vous importez vos tables clients les mots de passes n'ont pas changé, mais les clés de cryptages ne sont pas les mêmes, donc il est impossible de se logguer.

une solution proposée par un membre (Jean Francois G) est disponible ici.

Cordialement

Edited by epic1110 (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

Bonjour j'essaie sur la version 1.5.1.

 

via le manager

 

mais à chaque fois j'ai cette erreur

2 erreurs

  1. Le champ SQL est trop long. (Longueur maximale : 1000)

sur phpmyadmin ( sur OVH=

 

sur phpm y admin

j'ai un proleme avec LEFJOIN erreur de syntaxe

 

debug : #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 ps2010_product LEFT JOIN ( ps2010_product.price, ps2010_product_lang, ps201' at line 29{"success":false,"error":"

#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 ps2010_product\nLEFT JOIN ( ps2010_product.price, ps2010_product_lang, ps201' at line 29<\/div>"}

 

 

 

voici le le fichier corrigé

 

SELECT DISTINCT

ps2010_product.id_product AS 'id',

ps2010_product.active AS 'Actif (0.1)',

ps2010_product_lang.name AS 'Name*',

'' AS 'Categories (x,y,z,...)',

ps2010_product.price AS 'Price tax excl.',

ps2010_product.wholesale_price AS 'Wholesale price',

ps2010_product.on_sale AS 'On sale (0/1)',

ps2010_product.reference AS 'Reference #',

ps2010_product.supplier_reference AS 'Supplier reference #',

ps2010_supplier.name AS 'Supplier',

ps2010_manufacturer.name AS 'Manufacturer',

ps2010_product.ean13 AS 'EAN13',

ps2010_product.weight AS 'Weight',

ps2010_product.quantity AS 'Quantity',

ps2010_product_lang.description_short AS 'Short description',

ps2010_product_lang.description AS 'Description',

ps2010_tag.name AS 'Tags (x,y,z,...)',

ps2010_product_lang.meta_title AS 'Meta-title',

ps2010_product_lang.meta_keywords AS 'Meta-keywords',

ps2010_product_lang.meta_description AS 'Meta-description',

ps2010_product_lang.link_rewrite AS 'URL rewritten',

ps2010_product_lang.available_now AS 'Text when in-stock',

ps2010_product_lang.available_later AS 'Text if back-order allowed',

ps2010_product.date_add AS 'Date add product',

'' as 'Image URLs (x,y,z,...)',

0 as 'Delete existing images (0 = no, 1 = yes)',

 

FROM ps2010_product

LEFT JOIN ( ps2010_category_product, ps2010_product.price, ps2010_product_lang, ps2010_manufacturer, ps2010_supplier, ps2010_product_tag, ps2010_tag)

ON (

ps2010_product.id_product = ps2010_category_product.id_product AND

ps2010_product.id_product = ps2010_product_lang.id_product AND

ps2010_product.id_manufacturer = ps2010_manufacturer.id_manufacturer AND

ps2010_product.id_supplier = ps2010_supplier.id_supplier AND

ps2010_product_tag.id_product = ps2010_product_tag.id_product AND

ps2010_tag.id_tag = ps2010_tag.id_tag

)

WHERE

ps2010_product_lang.id_lang = 2 AND

ps2010_tag.id_lang = 2

 

 

 

Merci d'une réponse

Edited by redtango (see edit history)

Share this post


Link to post
Share on other sites

pour ma part, j'ai exporté avec celui la remis à ma sauce, et qui fonctionne pleinement :

 

SELECT DISTINCT

mag_product.id_product AS 'id',

mag_product.active AS 'Actif (0.1)',

mag_product_lang.name AS 'Name*',

'' AS 'Categories (x,y,z,...)',

mag_product.price AS 'Price tax excl.',

mag_product.id_tax_rules_group AS 'Tax rules id',

mag_product.reference AS 'Reference #',

mag_product.weight AS 'Weight',

mag_product.quantity AS 'Quantity',

mag_product_lang.description_short AS 'Short description',

mag_product_lang.description AS 'Description',

mag_product_lang.link_rewrite AS 'URL rewritten'

 

FROM mag_product

 

LEFT OUTER JOIN mag_product_lang

ON mag_product.id_product = mag_product_lang.id_product

 

LEFT OUTER JOIN mag_manufacturer

ON mag_product.id_manufacturer = mag_manufacturer.id_manufacturer

 

LEFT OUTER JOIN mag_specific_price

ON mag_product.id_product = mag_specific_price.id_product

 

LEFT OUTER JOIN mag_supplier

ON mag_product.id_supplier = mag_supplier.id_supplier

Share this post


Link to post
Share on other sites
pour ma part, j'ai exporté avec celui la remis à ma sauce, et qui fonctionne pleinement :

 

Merci pour ta requette, Elle marche bien mais je recupere pas le numéro de categorie pour ma part.

 

Quelqu'un pourrait peut etre m'expliquer (la logique et a quoi ca sert) des lignes suivantes ?:

 

'' AS 'Categories (x,y,z,...)', (est ce pour remplir une case vide ?)

 

et surtout:

 

LEFT OUTER JOIN mag_product_lang

ON mag_product.id_product = mag_product_lang.id_product

Edited by Cyrkam (see edit history)

Share this post


Link to post
Share on other sites

Pour ma part, (grace a vos derniers post), qui veut importer mon catalogue produit depuis une version 1.4.3 vers une 1.5.1.0 j'avance bien avec cette requête :

 

SELECT DISTINCT

ps_product.id_product AS 'id',

ps_product.active AS 'Actif (0.1)',

ps_product_lang.name AS 'Name*',

ps_product.id_category_default AS 'Categories (x,y,z,...)',

ps_product.price AS 'Price tax excl.',

ps_product.id_tax_rules_group AS 'Tax rules id',

ps_product.reference AS 'Reference #',

ps_product.weight AS 'Weight',

ps_product.quantity AS 'Quantity',

ps_product_lang.description_short AS 'Short description',

ps_product_lang.description AS 'Description',

ps_product_lang.link_rewrite AS 'URL rewritten',

ps_product_lang.meta_description AS 'Meta Description',

ps_product_lang.meta_keywords AS 'Meta Keywords',

ps_product_lang.meta_title AS 'Meta title'

 

FROM ps_product

 

LEFT OUTER JOIN ps_product_lang

ON ps_product.id_product = ps_product_lang.id_product

 

LEFT OUTER JOIN ps_manufacturer

ON ps_product.id_manufacturer = ps_manufacturer.id_manufacturer

 

LEFT OUTER JOIN ps_specific_price

ON ps_product.id_product = ps_specific_price.id_product

 

LEFT OUTER JOIN ps_supplier

ON ps_product.id_supplier = ps_supplier.id_supplier

 

WHERE

ps_product_lang.id_lang = 2

 

 

Sachant qu'ensuite je l'exporte depuis MySQL :

 

 

exporter en CSV

 

Champs terminés par ;

champs entourés par "

caractere special "

lignes terminées par \r\n

 

 

J' importe avec la fonction Import de prestashop 1.5.0.1

 

Et ca marche au poil !!

 

j'ai rajouté les données suivantes :

 

Meta title:

Meta description:

Meta keywords:

Edited by Cyrkam (see edit history)

Share this post


Link to post
Share on other sites

Bonjour,

 

Un grand merci pour ces posts, enfin un moyen propre et efficace d'exporter ses produits d'une boutique à l'autre sans problèmes.

 

J'ai cependant 2 petites questions :

- je souhaiterais aussi importer les dimensions de mes produits ors ça ne fait pas parti des "champs disponibles" dans l'import

- Deuxio comment faire pour importer les produits en multilangue?

 

Merci and keep up the good work!

Share this post


Link to post
Share on other sites

Bonjour,

Avec ca, sur une installation 1.5.2 :

SELECT DISTINCT

 

ps_product.id_product AS 'id',

ps_product.active AS 'Actif (0.1)',

ps_product_lang.name AS 'Name*',

'' AS 'Categories (x,y,z,...)',

ps_product.price AS 'Price tax excl.',

ps_product.id_tax_rules_group AS 'Tax rules id',

ps_product.wholesale_price AS 'Wholesale price',

ps_product.on_sale AS 'On sale (0/1)',

ps_specific_price.reduction AS 'Discount amount',

ps_specific_price.reduction AS 'Discount percent',

ps_specific_price.from AS 'Discount from (yyy-mm-dd)',

ps_specific_price.to AS 'Discount to (yyy-mm-dd)',

ps_product.reference AS 'Reference #',

ps_product.supplier_reference AS 'Supplier reference #',

ps_supplier.name AS 'Supplier',

ps_manufacturer.name AS 'Manufacturer',

ps_product.ean13 AS 'EAN13',

ps_product.upc AS 'UPC',

ps_product.ecotax AS 'Ecotax',

ps_product.weight AS 'Weight',

ps_product.quantity AS 'Quantity',

ps_product_lang.description_short AS 'Short description',

ps_product_lang.description AS 'Description',

ps_tag.name AS 'Tags (x,y,z,...)',

ps_product_lang.meta_title AS 'Meta-title',

ps_product_lang.meta_keywords AS 'Meta-keywords',

ps_product_lang.meta_description AS 'Meta-description',

ps_product_lang.link_rewrite AS 'URL rewritten',

ps_product_lang.available_now AS 'Text when in-stock',

ps_product_lang.available_later AS 'Text if back-order allowed',

ps_product.available_for_order AS 'Available for order',

ps_product.date_add AS 'Date add product',

ps_product.show_price AS 'Show price',

'' AS 'Image URLs (x,y,z,...)',

ps_product.online_only AS 'Only available online',

0 AS 'Delete existing images (0 = no, 1 = yes)',

ps_product.condition AS 'Condition'

 

FROM ps_product, ps_tag

 

LEFT OUTER JOIN ps_product_lang

ON ps_product.id_product = ps_product_lang.id_product AND ps_product_lang.id_lang = 2

 

LEFT OUTER JOIN ps_manufacturer

ON ps_product.id_manufacturer = ps_manufacturer.id_manufacturer

 

LEFT OUTER JOIN ps_specific_price

ON ps_product.id_product = ps_specific_price.id_product

 

LEFT OUTER JOIN ps_supplier

ON ps_product.id_supplier = ps_supplier.id_supplier

 

LEFT OUTER JOIN ps_product_tag

ON ps_product.id_product = ps_product_tag.id_product AND ps_tag.id_tag = ps_product_tag.id_tag AND ps_tag.id_lang = 2

J'ai :

2 erreurs

  1. Le champ SQL est trop long. (Longueur maximale : 1000)
  2. Erreur

Malgré certains tests de modifications, je ne trouve pas les erreurs à rectifier.

Ca devrait sauter aux yeux mais là je sèche

Share this post


Link to post
Share on other sites

Bonjour,

 

J'ai un soucis avec cette requete :

 

 

 

Création du fichier CSV pour récuperer vos adresses:

SELECT
ps_address.id_address,
ps_address.alias,
ps_address.active,
ps_customer.email,
ps_manufacturer.`name` AS Manufacturer,
ps_supplier.`name` AS Supplier,
ps_address.company,
ps_address.lastname,
ps_address.firstname,
ps_address.address1,
ps_address.address2,
ps_address.postcode,
ps_address.city,
ps_country_lang.`name` AS Country,
ps_state.`name` AS State,
ps_address.other,
ps_address.phone,
ps_address.phone_mobile,
ps_address.vat_number
FROM
ps_address
LEFT JOIN ps_customer ON ps_customer.id_customer = ps_address.id_customer
LEFT JOIN ps_manufacturer ON ps_manufacturer.id_manufacturer = ps_address.id_manufacturer
LEFT JOIN ps_supplier ON ps_supplier.id_supplier = ps_address.id_supplier
LEFT JOIN ps_country_lang ON ps_country_lang.id_country = ps_address.id_country
LEFT JOIN ps_state ON ps_state.id_state = ps_address.id_state

 

 

Elle me génère 4 Adresses identiques pour chaque client .... Pourquoi ?

  • Like 1

Share this post


Link to post
Share on other sites

Bonsoir,

Je tente de créer un script php pouvant être appelé par une tâche cron permettant de créer des fichiers csv. J'ai besoin d'aide !!

J'ai un problème avec la partie insérant le résultat de la requête dans le fichier :

<?php
include_once('./config/settings.inc.php');
$date =   date("Y_m_d_H")."h".date("i")."m";
$connection = mysql_connect(_DB_SERVER_, _DB_USER_, _DB_PASSWD_)
   or die("Unable to connect to MySQL");
   $db = mysql_select_db(_DB_NAME_,$connection);
if (mysql_connect (_DB_SERVER_, _DB_USER_, _DB_PASSWD_)) {
 echo 'connexion réussie';
}
else {
 echo 'connexion impossible...'.mysql_error();
}
$query=("SELECT p.id_product, p.active, pl.name, p.price, p.id_tax_rules_group, p.wholesale_price, p.reference, p.supplier_reference, p.id_supplier, p.id_manufacturer, p.upc, p.ecotax, p.weight, p.quantity, pl.description_short, pl.description, pl.meta_title, pl.meta_keywords, pl.meta_description, pl.link_rewrite, pl.available_now, pl.available_later, p.available_for_order, p.date_add, p.show_price, p.online_only, p.condition, p.id_shop_default
FROM ps_product p
LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product)
WHERE pl.id_lang = 1");
$result = mysql_query($query) or die ($query. ' - ' . mysql_error());
file_put_contents($date."_monfichier.csv", $result);
if (!$result) {
   $message  = 'Requête invalide : ' . mysql_error() . "\n";
   $message .= 'Requête complète : ' . $query;
   die($message);
}

Share this post


Link to post
Share on other sites

Bonjour à tous.

 

pour exporter mes produits en CSV, j'utilise la requete de Cyrkam postée le 25 octobre.

 

je suis en version 1.5.2.0

 

Cela fonctionne ... presque.

 

En fait, dans ma description de produits, j'ai du texte et un tableau avec du contenu.

Quand j'execute la requete, le texte est bien exporter, mais sans le tableau et son contenu.

 

Il y a une astuce ?

 

Cordialement

Olivier51

Share this post


Link to post
Share on other sites

salut ca marche super aurais tu la solution pour les commandes ?

 

Pour les commandes c'est les fichiers: "ps_order"

Share this post


Link to post
Share on other sites

Franchement, merci à vous pour ce topic, je vais tester ça pour migrer ma boutique de la version 1.4.9 vers la 1.5.3, vous pensez que c'est faisable?

Share this post


Link to post
Share on other sites

Bonjour à tous,

 

Concernant la requête SQL concernant les catégories, quelles modifications faut-il faire sur la requête pour n'obtenir qu'une seule langue (le français par exemple) quand on a un site multilingue ?

 

 

Pour info, je suis en version Prestashop 1.4.4.1

 

 

Merci pour ce très bon topic et pour votre aide.

Share this post


Link to post
Share on other sites

toto_toto voici la requete pour les catégories :

 

SELECT
ps_category.id_category,
ps_category.active,
`Name Category`.`name` AS `Name`,
`Name Parent`.`id_category` AS Parent,
`Name Category`.description,
`Name Category`.meta_title,
`Name Category`.meta_keywords,
`Name Category`.meta_description,
`Name Category`.link_rewrite
FROM
ps_category
LEFT JOIN ps_category_lang AS `Name Category` ON `Name Category`.id_category = ps_category.id_category AND `Name Category`.id_lang = 5
LEFT JOIN ps_category_lang AS `Name Parent` ON `Name Parent`.id_category = ps_category.id_parent AND `Name Category`.id_lang = 5
GROUP BY id_category

 

A noter que que je n'utilise pas le nom de la catégories parents pour faire le lien parent : simplement que si vous avez une catégorie avec le même, cela ne marchera pas.

 

Toto_toto, remplace 5 ( l'id de la langue Fr) par l'id de la langue voulu.

 

Ensuite lors de l'import, sélectionne bien la bonne langue pour sur l'interface Admin

Edited by Myst26 (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

Bonjour à tous et merci pour l'astuce, MYST26, attention à tous question difficile..... :wacko:

sais tu comment dans l'arborescence Catégorie et sous catégorie changer que les sous catégories,

pourquoi? lors de l'import de nouveaux produits je cré de nouvelles catégories, mais celles ci ne sont plus dans l'ordre alphabétique de recherche, donc je me pose deux questions:

ou enlever la catégorie et ses sous catégories ( j'ai essayer mais cela n'est pas pratique car je perds beaucoup d'info sur certains produits, prix spécifique, par quatité, promos etc...

ou arriver à enlever que les sous catégories, et bien sur arriver à les réimporter ...?

merci d'avance...... B)

Share this post


Link to post
Share on other sites

Merci pour ces infos mais si par exemple j'exporte de la 1.4 comment je réintégre mes catégories en 1.5.4.1?

De même pour les produits...

Share this post


Link to post
Share on other sites

Bonjour,

 

super le tuto, j'ai tout suivi à la lettre mais je rencontre un problème (du fait que je sois nulle en informatique).

Je me suis connecté au phpmyadmin (suis chez 1&1) mais je sais pas ou coller le code qui m'interresse

Je dois vraiment pas etre futée sachant que j'ai lu le process 3-4fois

Si quelqu'un avait une piste je vous en serait reconnaissante.

Merci

Share this post


Link to post
Share on other sites

Bonjour,

 

Une fois dans mysql, tu dois cliquer sur le nom de ta base de donnée colonne de gauche qui doit être du style "dbXXXXXXX" ensuite tu as les menu structure, sql, rechercher etc... tu va sur SQL. Tu colle le code puis executer.

Tu obtiens ton tableau

tu fais exporter

Sur cette nouvel page verifier que tu est bien en csv et surtout cocher "transmettre" puis cliquer sur executer..

 

Maintenant tu as ton fichier.

Share this post


Link to post
Share on other sites

Bonjour,

 

Une fois dans mysql, tu dois cliquer sur le nom de ta base de donnée colonne de gauche qui doit être du style "dbXXXXXXX" ensuite tu as les menu structure, sql, rechercher etc... tu va sur SQL. Tu colle le code puis executer.

Tu obtiens ton tableau

tu fais exporter

Sur cette nouvel page verifier que tu est bien en csv et surtout cocher "transmettre" puis cliquer sur executer..

 

Maintenant tu as ton fichier.

 

 

Bonjour à tous !

 

Je suis entrain de passer mon Presta 1.4.9 vers 1.5 (Dernière version) j'ai voulu suivre votre tuto... ça fait 3 heures que j'essaye d'exporter les catégories (Pour commencer) et je n'arrive même pas !! :-( ... j'ai toujours des erreurs de partout.

 

Est ce qu'il existe un autre moyen pour migrer le catalogue complet ? en langue Français seulement.

 

Merci à vous pour votre aide.

 

Cordialement

Matias

Share this post


Link to post
Share on other sites

Bonjour Passicool,

Je n'ai pas trouvé ou inserer le texte a coller.

je joins une copie ecran de ce que j'ai dans mon 1&1, ca expliquera certaienemnt mieux que ma facon de decrire.

 

Merci d'avance

ecran.png

Edited by calindoudou (see edit history)

Share this post


Link to post
Share on other sites

Bonjour,

 

Je suis sous PS 1.5.4.1 et souhaite copier les informations de la fiche produit "résumé", "description", "Référencement" de la page en FRANCAIS vers les autres langues grâce à une requete Mysql.

 

Une idée ?

Share this post


Link to post
Share on other sites

Pour passer vos boutique de 1.4 vers 1.5 il y a 1-Click Upgrade sous prestashop, cocher plus d'option(mode expert) et remplacer version mineures (recommandé) par version majeur puis sauver

 

Ainsi en cas de problème vous pouvez revenir en arrière.

Share this post


Link to post
Share on other sites

Bonjour à tous.

j'ai essayé plusieurs versions, aucune pour ma part ne marche réellement je suis sous 1.5.4

L'import des catégories via cette version ne marche pas

SELECT

ps_category.id_category,

ps_category.active,

`Name Category`.`name` AS `Name`,

`Name Parent`.`id_category` AS Parent,

`Name Category`.description,

`Name Category`.meta_title,

`Name Category`.meta_keywords,

`Name Category`.meta_description,

`Name Category`.link_rewrite

FROM

ps_category

LEFT JOIN ps_category_lang AS `Name Category` ON `Name Category`.id_category = ps_category.id_category AND `Name Category`.id_lang = 5

LEFT JOIN ps_category_lang AS `Name Parent` ON `Name Parent`.id_category = ps_category.id_parent AND `Name Category`.id_lang = 5

GROUP BY id_category

 

Cela me prend bien toutes mes catégories mais lors de l'import il y a des erreurs sur toutes mes catégories etant ecrit Le lien réécrit pour (ID : 98) a été réécrit en tant que nom de ma catégorie.

 

Je pense qu'il ne manque pas grand chose pour que cela marche car c'est la même erreur pour toutes mes catégories.

 

J'ai plusieurs fois le même nom de catégories, c'est donc impossible pour moi de les récupérer tels quelles ?

Edited by dukofo (see edit history)

Share this post


Link to post
Share on other sites

Quand je fais l'import avec la facon a cyrkham, cela me met The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator to inform of the time the error occurred and of anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

 

Est ce que quelqu'un dernièrement avec une version 1.5.4 est arrivé à importer les catégories ?

Edited by dukofo (see edit history)

Share this post


Link to post
Share on other sites

Quelqu'un pourrait me donner une bonne config pour exporter uniquement mes catégories en 1.5.4

Merci.

Share this post


Link to post
Share on other sites

@ passicol,

J'ai oublié et pas eu le temps de vous répondre, mais je voulais vous remercier de votre aide :) ca fonctionne

 

@ tous : ou trouver les tables qui me permettra de recuperer les numeros suivis avec les noms clients (pour relancer la poste au dela des 48H).

et dans le cas ou la solution est réalisable est il possible de generer une tache cron pour que ca fonctionne sans se prendre la tete :)

 

Merci d'avance

Share this post


Link to post
Share on other sites

Bonjour,

en relancant le petit sujet (au cas ou pour au dessus).

 

Ma demande serait de savoir comment pouvoir exporter les commandes en attentes, et les re-injecteés en y ayant inseré le N° suivi ainsi qu'un changement de statut.

 

Merci d'avance pour votre aide.

Cdt

Share this post


Link to post
Share on other sites

Bonjour et merci de ta reponse.

J'ai installé le module (malgrès que sur le forum en anglais j'ai rien compris) :).

Malheureuseument, il ne fonctionne pas :s

Cdt

Share this post


Link to post
Share on other sites

Bonjour,

 

Merci pour ce topic qui m'ouvre les portes des requêtes SQL…

à ce propos j'aimerais savoir si en partant de la table ci-dessous:

 

 

ps_order_detail:

id_order   product_id   product_quantity
     1                 1                       1
     2                 1                       9
     2                 2                       3
     3                 1                       5
     3                  2                      6
     3                  3                      3
     3                  4                      1
 

 

 il est possible de créer une nouvelle table comme celle-ci ?? et si oui, quelle en serait la syntaxe…  

voici donc ce à quoi j'aimerais arriver:

 

 

ps_nouvelle_table:
id_order  product_id1  product_id2  product_id3   product_id4
     1                   1
     2                   9                     3
     3                   5                     6                     3                    1
 
merci d'avance pour votre aide!  :)

Share this post


Link to post
Share on other sites

re bonjour,

 

Après tumultes essai, très galère pour moi, j'ai reussi a exporté les commandes "en cours de livraisons" via cette commande :

SELECT O.id_order, O.id_customer, C.email, C.lastname, C.firstname
FROM `ps_orders` O
INNER JOIN ps_order_history OH on OH.id_order = O.id_order
INNER JOIN ps_customer C on C.id_customer= O.id_customer
where OH.id_order_state = 2

 

Le problème est quand j'essai de modifier le statut avec cette commande :

INSERT INTO ps_order_history (id_employee, id_order, id_order_state, date_add)
VALUES(2 ,7,5, '20/09/2013 07:30'),
VALUES(2,8,5,
'20/09/2013 07:30'),

......

j'ai une erreur  de ce type :

MySQL a répondu:b_help.png

#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 'VALUES(2,7,5,'20/09/2013  07:30'),
VALUES(2,8,5,'20/09/2013  07:30'),
VALUES(2' at line 3 

 

Quelqu'un aurait une piste ?????

Share this post


Link to post
Share on other sites

>Bibiyanki Il y a déjà la requête pour les catégories qui fonctionne en 1.4

 

Pour ceux qui le souhaite en 1.4 les déclinaisons sont stocké dans les 5 tables PS_Attribute.

L'export est moins exploitable car l'info est stocké avec un identifiant qui permet de faire la liaison avec l'attribut et le groupe puis le produit.

J'ai trop de déclinaison pour pouvoir en tirer quelque chose mais pour ceux qui en ont peu vous avez au moins la direction à prendre.

Share this post


Link to post
Share on other sites

Bonjour bonjour,
 
Voici une petite contribution, ma requête pour sortir l'inventaire :

SET SQL_BIG_SELECTS=1;

SELECT pl.id_product 'ID produit', pl.name Nom, cl.name Catégorie,
IFNULL(sa.quantity, '?') Quantité, CONCAT(IFNULL(CONCAT(agl.name,' : '),''), IFNULL(al.name,'')) Déclinaison
FROM product_lang pl
LEFT JOIN category_lang cl on cl.id_category = (select cp.id_category from category_product cp where cp.id_product=pl.id_product LIMIT 0,1 ) and cl.id_lang=2
LEFT JOIN stock_available sa on sa.id_product=pl.id_product and (sa.id_product_attribute<>0
or sa.id_product not in (select id_product from stock_available where id_product_attribute<>0))
LEFT JOIN (select id_product_attribute, MIN(id_attribute) id_attribute from product_attribute_combination group by id_product_attribute) pac 
on pac.id_product_attribute = sa.id_product_attribute and sa.id_product_attribute<>0
LEFT JOIN attribute_lang al on al.id_attribute=pac.id_attribute and al.id_lang=2
LEFT JOIN attribute_group_lang agl on agl.id_attribute_group=(
select a.id_attribute_group from attribute a where a.id_attribute = pac.id_attribute LIMIT 0,1) and agl.id_lang=2
WHERE pl.id_lang=2
ORDER BY pl.id_product desc

Bon, alors déjà BIG SELECT parce que sinon ça passe pas (je suis une ancienne de SQL Server... je suis frustrée donc)

Ensuite ma problématique c'était d'avoir des déclinaisons, et le stock, puisque c'est pour une client qui veut faire un inventaire et qui bcp de produits presque tous avec déclinaison.

 

Donc explications :

Je commence par product_lang avec id_lang=2 because je veux français.

+ Je joins UNE catégorie (au pif celle qui vient) - ceci pourrait être INNER JOIN si on est sûr d'avoir une categ...

+ Je joins le stock et là faut avoir quelques notions du stock 1.5 : SOIT je joins pour une déclinaison SOIT le produit n'a pas de déclinaison - idem ça devrait être INNER JOIN si on est sûr de ne pas avoir d'incohérence, ie de produits qui ne sont pas dans la table stock... Ce site provenant d'une migration 1.3.2 vers 1.5.2 (que j'ai faite oui c'est possible !) on n'est jamais sûr de rien...

+ Je vais chercher le nom de la déclinaison, s'il y en a une (et en fait je ne prends QUE le nom du 1er attribut qui vient - pour ma client ça suffit la plupart du temps... ouf!). Nom de la déclinaison = nom de l'attibut ET nom de la valeur de l'attribut, d'où les multiples jointures...

 

Voili voilou.

Ce n'est pas parfait mais ça a le mérite d'exister.

A noter qui si je ne suis pas connectée sur phpmyadmin en root ça ne fonctionne pas, et que l'export en csv ou autre ne fonctionne pas non plus, je n'ai pas cherché plus loin donc je fais un copié/collé du résultat...

 

Si vous vous en servez et que vous êtes content faites le moi savoir !

Si ça marche pas je ne veux pas le savoir :)

 

a+

Pascaline

Share this post


Link to post
Share on other sites

re bonjour,

 

Après tumultes essai, très galère pour moi, j'ai reussi a exporté les commandes "en cours de livraisons" via cette commande :

SELECT O.id_order, O.id_customer, C.email, C.lastname, C.firstname

FROM `ps_orders` O

INNER JOIN ps_order_history OH on OH.id_order = O.id_order

INNER JOIN ps_customer C on C.id_customer= O.id_customer

where OH.id_order_state = 2

 

Le problème est quand j'essai de modifier le statut avec cette commande :

INSERT INTO ps_order_history (id_employee, id_order, id_order_state, date_add)

VALUES(2 ,7,5, '20/09/2013 07:30'),

VALUES(2,8,5,'20/09/2013 07:30'),

......

j'ai une erreur  de ce type :

MySQL a répondu:b_help.png

#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 'VALUES(2,7,5,'20/09/2013  07:30'),

VALUES(2,8,5,'20/09/2013  07:30'),

VALUES(2' at line 3 

 

Quelqu'un aurait une piste ?????

Bonjour Calindoudou,

Il y a un espace sur la 1er ligne (2 ,7...

Edited by monvidedressing (see edit history)

Share this post


Link to post
Share on other sites

Bonjour bonjour,

 

Voici une petite contribution, ma requête pour sortir l'inventaire :

SET SQL_BIG_SELECTS=1;

SELECT pl.id_product 'ID produit', pl.name Nom, cl.name Catégorie,
IFNULL(sa.quantity, '?') Quantité, CONCAT(IFNULL(CONCAT(agl.name,' : '),''), IFNULL(al.name,'')) Déclinaison
FROM product_lang pl
LEFT JOIN category_lang cl on cl.id_category = (select cp.id_category from category_product cp where cp.id_product=pl.id_product LIMIT 0,1 ) and cl.id_lang=2
LEFT JOIN stock_available sa on sa.id_product=pl.id_product and (sa.id_product_attribute<>0
or sa.id_product not in (select id_product from stock_available where id_product_attribute<>0))
LEFT JOIN (select id_product_attribute, MIN(id_attribute) id_attribute from product_attribute_combination group by id_product_attribute) pac 
on pac.id_product_attribute = sa.id_product_attribute and sa.id_product_attribute<>0
LEFT JOIN attribute_lang al on al.id_attribute=pac.id_attribute and al.id_lang=2
LEFT JOIN attribute_group_lang agl on agl.id_attribute_group=(
select a.id_attribute_group from attribute a where a.id_attribute = pac.id_attribute LIMIT 0,1) and agl.id_lang=2
WHERE pl.id_lang=2
ORDER BY pl.id_product desc

Bon, alors déjà BIG SELECT parce que sinon ça passe pas (je suis une ancienne de SQL Server... je suis frustrée donc)

Ensuite ma problématique c'était d'avoir des déclinaisons, et le stock, puisque c'est pour une client qui veut faire un inventaire et qui bcp de produits presque tous avec déclinaison.

 

Donc explications :

Je commence par product_lang avec id_lang=2 because je veux français.

+ Je joins UNE catégorie (au pif celle qui vient) - ceci pourrait être INNER JOIN si on est sûr d'avoir une categ...

+ Je joins le stock et là faut avoir quelques notions du stock 1.5 : SOIT je joins pour une déclinaison SOIT le produit n'a pas de déclinaison - idem ça devrait être INNER JOIN si on est sûr de ne pas avoir d'incohérence, ie de produits qui ne sont pas dans la table stock... Ce site provenant d'une migration 1.3.2 vers 1.5.2 (que j'ai faite oui c'est possible !) on n'est jamais sûr de rien...

+ Je vais chercher le nom de la déclinaison, s'il y en a une (et en fait je ne prends QUE le nom du 1er attribut qui vient - pour ma client ça suffit la plupart du temps... ouf!). Nom de la déclinaison = nom de l'attibut ET nom de la valeur de l'attribut, d'où les multiples jointures...

 

Voili voilou.

Ce n'est pas parfait mais ça a le mérite d'exister.

A noter qui si je ne suis pas connectée sur phpmyadmin en root ça ne fonctionne pas, et que l'export en csv ou autre ne fonctionne pas non plus, je n'ai pas cherché plus loin donc je fais un copié/collé du résultat...

 

Si vous vous en servez et que vous êtes content faites le moi savoir !

Si ça marche pas je ne veux pas le savoir :)

 

a+

Pascaline

Bonjour Askaline,

 

Comme je suis une mauvaise élève.... je la ramène..:-)

En PS 1.5.6, lorsque je mets cette requête dans le Gestionnaire SQL, j'ai une erreur :

La table DEPENDENT-SUBQUERY n'existe pas.

Et je ne trouve pas d'où vient l'erreur puisque cette table effectivement n'existe pas et n'est pas appelé.

J'ai d'autres requêtes qui fonctionne parfaitement !!

Share this post


Link to post
Share on other sites

Re bonjour,

J'avais cette requête qui fonctionnait très bien et après une MAJ de 1.5.5 en 1.5.6, le fichier est vide. Aucune erreur n'apparaît. Elle fonctionne sur Mysql.

Mes autres requêtes pour les catégories... fonctionnent très bien.

Je précise que le fichier contient normalement environ 20 000 lignes.

 

SELECT p.id_product, p.active, pl.name, GROUP_CONCAT(DISTINCT(cl.name) SEPARATOR ",") as categories, cl.id_category, p.price, p.id_tax_rules_group, p.wholesale_price, p.on_sale, p.reference, p.supplier_reference, p.id_supplier, p.id_manufacturer, p.upc, p.ecotax, p.weight, p.quantity, pl.description_short, pl.description, pl.meta_title, pl.meta_keywords, pl.meta_description, pl.link_rewrite, pl.available_now, pl.available_later, p.available_for_order, p.date_add, p.show_price, p.online_only, p.condition, p.id_shop_default FROM ps_product p LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product) LEFT JOIN ps_category_product cp ON (p.id_product = cp.id_product) LEFT JOIN ps_category_lang cl ON (cp.id_category = cl.id_category) WHERE pl.id_lang = 2 AND cl.id_lang = 2 GROUP BY p.id_product

 

EDIT : je suis idiote mais puisque la requête fonctionne sur Mysql c'est du côté de Prestashop qu'il y a un soucis.

 

EDIT : c'est la partie "GROUP_CONCAT(DISTINCT(cl.name) SEPARATOR ",") as categories" qui pose un problème !!!

 

EDIT : Finalement problème résolu par l'opération du Saint Esprit.... Les mystères de l'informatique !!!

Edited by monvidedressing (see edit history)

Share this post


Link to post
Share on other sites

Bonjour, j'essai d'appliquer les requetes présentées ici même pour passer ma boutique de 1.4.7.3 à 1.5.6.1 a la fin de l'importation, j'ai un message me disant que les donnés sont bien importées mais il n'y a toujours rien de visible dans mon BO, que ce passe t'il ?

 

merci

Share this post


Link to post
Share on other sites

Bonjour, j'essai d'appliquer les requetes présentées ici même pour passer ma boutique de 1.4.7.3 à 1.5.6.1 a la fin de l'importation, j'ai un message me disant que les donnés sont bien importées mais il n'y a toujours rien de visible dans mon BO, que ce passe t'il ?

 

merci

Bonjour brikobike,

 

Ces requêtes sont pour exporter les produits mais pas les importer. Comment pouvez-vous importer avec ces requêtes ??????

Vous importez quoi (fichier csv ou sql ) et par quel biais (l'import PS ou l'import directe dans la base de données)?

Share this post


Link to post
Share on other sites

Bonjour monvidedressing, tout d'abord je te remercie pour ton aide, je me sert des requetes pour exporter mes produits en CSV via PHPadmin puis je les importes via le module import inclus dans prestashop, j'ai bien un message me disant que l'importation a été effectuée mais je n'ai toujours rien dans la colone "categorie" ou autres   :(

Edited by brikobike (see edit history)

Share this post


Link to post
Share on other sites

Bonjour,

Merci pour ce tuto que je viens de découvrir.

Je recherche quelle serait la requêtes SQL pour récupérer les commandes clients.

 

Merci de votre aides.

Bonne fêtes à tous.

Share this post


Link to post
Share on other sites

Bonjour,

Merci pour ce tuto que je viens de découvrir.

Je recherche quelle serait la requêtes SQL pour récupérer les commandes clients.

 

Merci de votre aides.

Bonne fêtes à tous.

 

Bonjour,

 

Merci pour vos contributions.

 

mfrederic4, pour les commandes, Prestashop préconise ce code : 

 
Listing all the orders, with details about carrier, currency, payment, total and date

SELECT o.`id_order` AS `id`,
    CONCAT(LEFT(c.`firstname`, 1), '. ', c.`lastname`) AS `Customer`,
    ca.`name` AS `Carrier`,
    cu.`name` AS `Currency`,
    o.`payment`, CONCAT(o.`total_paid_real`, ' ', cu.`sign`) AS `Total`,
    o.`date_add` AS `Date`
FROM `ps_orders` o
LEFT JOIN `ps_customer` c ON (o.`id_customer` = c.`id_customer`)
LEFT JOIN `ps_carrier` ca ON (o.id_carrier = ca.id_carrier)
LEFT JOIN `ps_currency` cu ON (o.`id_currency` = cu.`id_currency`)

Source : http://doc.prestashop.com/display/PS16/SQL+Manager

Share this post


Link to post
Share on other sites

Bonjour,

 

Merci pour vos contributions.

 

mfrederic4, pour les commandes, Prestashop préconise ce code : 

 
Listing all the orders, with details about carrier, currency, payment, total and date

SELECT o.`id_order` AS `id`,
    CONCAT(LEFT(c.`firstname`, 1), '. ', c.`lastname`) AS `Customer`,
    ca.`name` AS `Carrier`,
    cu.`name` AS `Currency`,
    o.`payment`, CONCAT(o.`total_paid_real`, ' ', cu.`sign`) AS `Total`,
    o.`date_add` AS `Date`
FROM `ps_orders` o
LEFT JOIN `ps_customer` c ON (o.`id_customer` = c.`id_customer`)
LEFT JOIN `ps_carrier` ca ON (o.id_carrier = ca.id_carrier)
LEFT JOIN `ps_currency` cu ON (o.`id_currency` = cu.`id_currency`)

Source : http://doc.prestashop.com/display/PS16/SQL+Manager

 

Merci ça marche très bien mais j'aurais besoin d'ajouter dans cet export le prix d'achat fournisseur correspondant au produit acheter.

J'essaie d'exporter la valeur "wholesale_price" de la table "ps_product" en vain.

Quelqu'un aurait il une idée?

En vous remerciant par avance.

Share this post


Link to post
Share on other sites

Pour aussi avoir les quantités :

 

SELECT p.id_product, p.active, pl.name, GROUP_CONCAT(DISTINCT(cl.name) SEPARATOR ",") as categories, cl.id_category, p.price, p.id_tax_rules_group, p.wholesale_price, p.on_sale, p.reference, p.supplier_reference, p.id_supplier, p.id_manufacturer, p.upc, p.ecotax, p.weight, sa.quantity, pl.description_short, pl.description, pl.meta_title, pl.meta_keywords, pl.meta_description, pl.link_rewrite, pl.available_now, pl.available_later, p.available_for_order, p.date_add, p.show_price, p.online_only, p.condition, p.id_shop_default FROM ps_product p LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product) LEFT JOIN ps_category_product cp ON (p.id_product = cp.id_product) LEFT JOIN ps_category_lang cl ON (cp.id_category = cl.id_category) LEFT JOIN ps_stock_available sa ON (p.id_product = sa.id_product) WHERE pl.id_lang = 2 AND cl.id_lang = 2 GROUP BY p.id_product

Edited by brandlee (see edit history)

Share this post


Link to post
Share on other sites

Bonjour,

merci pour tout ce travail.

Toutes ces requêtes sont elles compatibles avec la version 1.6.0.6?

Y a t-il une possibilité de regrouper toutes ces requêtes en une seule?

Share this post


Link to post
Share on other sites

Bonjour,

 

Quelqu'un connaîtrait-il la requête pour exporter ses commandes (avec détail produits et client) ?

 

Merci d'avance

Share this post


Link to post
Share on other sites

Bonjour bonjour,

 

Voici une petite contribution, ma requête pour sortir l'inventaire :

SET SQL_BIG_SELECTS=1;

SELECT pl.id_product 'ID produit', pl.name Nom, cl.name Catégorie,
IFNULL(sa.quantity, '?') Quantité, CONCAT(IFNULL(CONCAT(agl.name,' : '),''), IFNULL(al.name,'')) Déclinaison
FROM product_lang pl
LEFT JOIN category_lang cl on cl.id_category = (select cp.id_category from category_product cp where cp.id_product=pl.id_product LIMIT 0,1 ) and cl.id_lang=2
LEFT JOIN stock_available sa on sa.id_product=pl.id_product and (sa.id_product_attribute<>0
or sa.id_product not in (select id_product from stock_available where id_product_attribute<>0))
LEFT JOIN (select id_product_attribute, MIN(id_attribute) id_attribute from product_attribute_combination group by id_product_attribute) pac 
on pac.id_product_attribute = sa.id_product_attribute and sa.id_product_attribute<>0
LEFT JOIN attribute_lang al on al.id_attribute=pac.id_attribute and al.id_lang=2
LEFT JOIN attribute_group_lang agl on agl.id_attribute_group=(
select a.id_attribute_group from attribute a where a.id_attribute = pac.id_attribute LIMIT 0,1) and agl.id_lang=2
WHERE pl.id_lang=2
ORDER BY pl.id_product desc

Bon, alors déjà BIG SELECT parce que sinon ça passe pas (je suis une ancienne de SQL Server... je suis frustrée donc)

Ensuite ma problématique c'était d'avoir des déclinaisons, et le stock, puisque c'est pour une client qui veut faire un inventaire et qui bcp de produits presque tous avec déclinaison.

 

Donc explications :

Je commence par product_lang avec id_lang=2 because je veux français.

+ Je joins UNE catégorie (au pif celle qui vient) - ceci pourrait être INNER JOIN si on est sûr d'avoir une categ...

+ Je joins le stock et là faut avoir quelques notions du stock 1.5 : SOIT je joins pour une déclinaison SOIT le produit n'a pas de déclinaison - idem ça devrait être INNER JOIN si on est sûr de ne pas avoir d'incohérence, ie de produits qui ne sont pas dans la table stock... Ce site provenant d'une migration 1.3.2 vers 1.5.2 (que j'ai faite oui c'est possible !) on n'est jamais sûr de rien...

+ Je vais chercher le nom de la déclinaison, s'il y en a une (et en fait je ne prends QUE le nom du 1er attribut qui vient - pour ma client ça suffit la plupart du temps... ouf!). Nom de la déclinaison = nom de l'attibut ET nom de la valeur de l'attribut, d'où les multiples jointures...

 

Voili voilou.

Ce n'est pas parfait mais ça a le mérite d'exister.

A noter qui si je ne suis pas connectée sur phpmyadmin en root ça ne fonctionne pas, et que l'export en csv ou autre ne fonctionne pas non plus, je n'ai pas cherché plus loin donc je fais un copié/collé du résultat...

 

Si vous vous en servez et que vous êtes content faites le moi savoir !

Si ça marche pas je ne veux pas le savoir :)

 

a+

Pascaline

 

Merci Pascaline pour votre code, il fonctionne nickel.

 

Mais comment peut-on faire apparaitre les valeurs pour les attributs?

 

Edit: J'ai réussi à les voir :)

Edited by danvers (see edit history)

Share this post


Link to post
Share on other sites

Bonjour,

 

Concernant les images notamment en venant d'une 1.3 vers 1.6 comment procédez vous ?

Le CSV possède un champ où il faut séparer les images par des virgules.

 

Merci pour votre aide

Share this post


Link to post
Share on other sites

Bonjour, je cherche comment faire pour avoir les références,les attributs avec les valeurs ,les quantités pour presta 1.6.0.9.Merci

  • Like 1

Share this post


Link to post
Share on other sites

bonjour quelle requetes SQL pour récupérer les sous-catégories car j'ai réussi à avoir les catégories mais pas les sous-catégories  un petit coud de main svp merci

Share this post


Link to post
Share on other sites

ma petite contribution qui fonctionne impec pour l'export de vos catégorie en ligne avec leur ID .

 

SELECT `id_category`, `name`, `description`, `link_rewrite`, `meta_title`, `meta_keywords`, `meta_description` FROM `ps_category_lang` WHERE 1

 

 

n'oublier pas avant l'export de cocher CSV, la séparation c'est le point virgule et coche " ajouter le nom en premiere ligne )

 

 

Share this post


Link to post
Share on other sites

bonjour

j'apporte également ma contribution en répondant au post de Cyrkam

 

 

Bonjour,

J'ai un soucis avec cette requete :
 

'epic1110', on 13 Feb 2012 - 11:22 AM, said:snapback.png

Création du fichier CSV pour récuperer vos adresses:

SELECT
ps_address
.id_address,
ps_address.alias,
ps_address.active,
ps_customer.email,
ps_manufacturer.`name` AS Manufacturer,
ps_supplier.`name` AS Supplier,
ps_address.company,
ps_address.lastname,
ps_address.firstname,
ps_address.address1,
ps_address.address2,
ps_address.postcode,
ps_address.city,
ps_country_lang.`name` AS Country,
ps_state.`name` AS State,
ps_address.other,
ps_address.phone,
ps_address.phone_mobile,
ps_address.vat_number
FROM
ps_address
LEFT JOIN ps_customer ON ps_customer
.id_customer = ps_address.id_customer
LEFT JOIN ps_manufacturer ON ps_manufacturer
.id_manufacturer = ps_address.id_manufacturer
LEFT JOIN ps_supplier ON ps_supplier
.id_supplier = ps_address.id_supplier
LEFT JOIN ps_country_lang ON ps_country_lang
.id_country = ps_address.id_country
LEFT JOIN ps_state ON ps_state
.id_state = ps_address.id_state

Elle me génère 4 Adresses identiques pour chaque client .... Pourquoi ?

 

Pour sélectionner une seule occurence de chaque adresse il te faut cette requète:

 

SELECT DISTINCT

ps_address.id_address,
ps_address.alias,
ps_address.active,
ps_customer.email,
ps_address.id_customer AS 'ID client',
ps_manufacturer.`name` AS Manufacturer,
ps_supplier.`name` AS Supplier,
ps_address.company,
ps_address.lastname,
ps_address.firstname,
ps_address.address1,
ps_address.address2,
ps_address.postcode,
ps_address.city,
ps_state.`name` AS State,
ps_address.other,
ps_address.phone,
ps_address.phone_mobile,
ps_address.vat_number,
ps_address.id_country

FROM
ps_address

LEFT JOIN (ps_manufacturer, ps_supplier, ps_state)

ON  (

ps_manufacturer.id_manufacturer = ps_address.id_manufacturer AND
ps_supplier.id_supplier = ps_address.id_supplier AND
ps_state.id_state = ps_address.id_state  
)

INNER JOIN ps_customer ON ps_address.id_customer = ps_customer.id_customer


GROUP BY ps_address.id_address

 

il me fallait un INNER JOIN sur la table ps_customer sinon la requète me retournait un résultat null dans les colonnes id_customer et email... cette requète fonctionne pour un presta 1.6.0.11 donc je pense que cela devrait marcher sur les version précédentes...

Edited by kingfaya (see edit history)

Share this post


Link to post
Share on other sites

Bonjour, je me sert de cette requète pour exporter mes produits, par contre j'aurai aimé rajouter la possibilité d'exporter en même temps le Code EAN et le fournisseur , quelqu'un aurai la solution ?

 

D'avance merci

 

Requète :

 

SELECT
 p
.id_product,
 p.reference,
 group_concat(concat(psupp.product_supplier_reference)) as refs_fournisseur,
 pl.name,
 p.id_category_default,
 m.name as manufacturer_name,
 pshop.price as prix_ht,
 pl.description_short AS resume,
 pl.description AS description,
 sa.quantity as 'quantite',
 p.active

FROM ps_product p
LEFT JOIN ps_product_lang pl on pl
.id_product = p.id_product and pl.id_lang = 1 and pl.id_shop = 1
LEFT JOIN ps_product_shop pshop on pshop.id_product = p.id_product and pshop.id_shop = 1
LEFT JOIN ps_manufacturer m on m.id_manufacturer = p.id_manufacturer
LEFT JOIN ps_product_supplier psupp on psupp
.id_product = p.id_product and psupp.id_product_attribute = 0
INNER JOIN ps_stock_available sa on sa.id_product = p.id_product and sa.id_product_attribute = 0 and sa.id_shop = 1
group by p.id_product

 

 

 

 

voilà

Edited by balaizeben (see edit history)

Share this post


Link to post
Share on other sites

yop

ajoute p.ean13 pour le code EAN13 (je te l'ai mis dans le même format que ta requête normalement si tu copie-colle ça devrait passer,.... sans oublier les virgules ^^)

et pour le fournisseur:

 

soit tu ajoute p.id_supplier qui te donnera par la suite le fournisseur correspondant

soit tu ajoute la ligne ps_supplier.name qui te donnera directement le nom du fournisseur

 

dans le second cas, tu devra ajouter ps_product.id_supplier = ps_supplier.id_supplier dans tes arguments "on"

(d'ailleurs a ce sujet savais tu que tu peux grouper tes LEFT JOIN avec une parenthèse? ça donne comme on peut le voir un peu plus haut dans ce topic: LEFT JOIN ma_table ON (mon_premier_arg =mon_second_arg AND mon_premier_arg = mon_troisieme_arg..... et ainsi de suite))

 

en espérant que cela te servira

 

edit

 

Sinon tu peux aller voir dans ta BDD, tu verras directement quelles sont les infos qui te sont utiles et ou les trouver. Il ne te restera plus qu'a faire la bonne joiture pour les avoir dans ta requète ^^

Edited by kingfaya (see edit history)

Share this post


Link to post
Share on other sites

yop

ajoute p.ean13 pour le code EAN13 (je te l'ai mis dans le même format que ta requête normalement si tu copie-colle ça devrait passer,.... sans oublier les virgules ^^)

et pour le fournisseur:

 

soit tu ajoute p.id_supplier qui te donnera par la suite le fournisseur correspondant

soit tu ajoute la ligne ps_supplier.name qui te donnera directement le nom du fournisseur

 

dans le second cas, tu devra ajouter ps_product.id_supplier = ps_supplier.id_supplier dans tes arguments "on"

(d'ailleurs a ce sujet savais tu que tu peux grouper tes LEFT JOIN avec une parenthèse? ça donne comme on peut le voir un peu plus haut dans ce topic: LEFT JOIN ma_table ON (mon_premier_arg =mon_second_arg AND mon_premier_arg = mon_troisieme_arg..... et ainsi de suite))

 

en espérant que cela te servira

 

edit

 

Sinon tu peux aller voir dans ta BDD, tu verras directement quelles sont les infos qui te sont utiles et ou les trouver. Il ne te restera plus qu'a faire la bonne joiture pour les avoir dans ta requète ^^

 

OK, merci, j'aurai du préciser que j'étais un novice dans ce domaine :) ..... donc je vais essayer de faire ça et reviens ici pour donner des nouvelles.

 

En tout cas merci

 

Donc si je comprend bien, ça devrai donner ça :

 

 

SELECT

 p.id_product,

 p.reference,

 group_concat(concat(psupp.product_supplier_reference)) as refs_fournisseur,

 pl.name,

 p.id_category_default,

 m.name as manufacturer_name,

 pshop.price as prix_ht,

 pl.description_short AS resume,

 pl.description AS description,

 sa.quantity as 'quantite',

 p.ean13,

 ps_supplier.name,

 p.active

 

FROM ps_product p

LEFT JOIN ps_product_lang pl on pl.id_product = p.id_product and pl.id_lang = 1 and pl.id_shop = 1

LEFT JOIN ps_product_shop pshop on pshop.id_product = p.id_product and pshop.id_shop = 1

LEFT JOIN ps_manufacturer m on m.id_manufacturer = p.id_manufacturer

LEFT JOIN ps_product.id_supplier = ps_supplier.id_supplier

LEFT JOIN ps_product_supplier psupp on psupp.id_product = p.id_product and psupp.id_product_attribute = 0

INNER JOIN ps_stock_available sa on sa.id_product = p.id_product and sa.id_product_attribute = 0 and sa.id_shop = 1

group by p.id_product

Edited by balaizeben (see edit history)

Share this post


Link to post
Share on other sites