Jump to content
  • 0
Nico de Bordeaux

Problème d'exportation de variable dans phpmyadmin pour creation de fichier csv

Question

Je suis entrain de faire un fichier csv d'importation avec phpmyadmin mes id sont sous cette forme 2,7,9,10,12...etc suite à divers suppression de produits
je les voudrais en 1,2,3,4,5,6...etc
donc par exemple pour produit.csv
 
SELECT 

p.`id_product` AS 'Product ID',

@row_number :=
CASE
WHEN @product_no != @row_number THEN @row_number + 1
ELSE 1
END AS 'New Product ID',

pl.`name` AS 'Name'

FROM `ps_product` p 

CROSS JOIN (SELECT @product_no:= 0,@row_number:= 0) as temp

LEFT JOIN `ps_product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = 2 )

GROUP BY p.`id_product`
HAVING p.`id_product` IS NOT NULL
ORDER BY p.`id_product` ASC

Résultats

prévisualisation dans phpmyadmin OK

Product ID | New Product ID | Name
2 | 1 | azert
4 | 2 | yuio
6 | 3 | pqsdf
8 | 4 | ghjkl
9 | 5 | mwxcv
10 | 6 | bnaze
14 | 7 | rtyui
15 | 8 | opqsdf
 
Exportation csv PROBLEME
Product ID | New Product ID | Name
2 | 1 | azert
4 | 1 | yuio
6 | 1 | pqsdf
8 | 1 | ghjkl
9 | 1 | mwxcv
10 | 1 | bnaze
14 | 1 | rtyui
15 | 1 | opqsdf
 
Y a t'il une astuce pour exporter les variables ??

Share this post


Link to post
Share on other sites

12 answers to this question

Recommended Posts

  • 0

Bonjour,


J'ai testé via phpMyadmin ça bloque aussi.

Par contre ça fonctionne très bien en commande :

mysql -h localhost -u USER -pPASSWORD DATA_BASE < request.sql > out.csv

Le fichier request.sql contient ta requête.

 

 

Edited by okom3pom

Share this post


Link to post
Share on other sites
  • 0

Idem j'ai testé par acquis de conscience.

J'ai simplifié votre requête par une de base et j'ai toujours un soucis d'export de variable.

Je n'ai jamais importé de csv dans prestashop mais il ne fait pas un auto incrément ?

   

Share this post


Link to post
Share on other sites
  • 0

oui et non

pour les produits c'est pas un problème... j'ai pris cet exemple par ce que facile a mettre en oeuvre mais si tu veux un truc propre avec des ids réalignés pour les combinaisons les attributs et autres... ben les variables c'est bien pratique pour écraser les anciens id.

Je suis entrain de faire un petit tuto pour expliquer ma demarche
je te copie le debut j'ai pas fini... mais ça te donne une idée de la demarche...

donc je souhaitais faire une mise à jour prestashop 1.4.8 vers 1.7
je test avec Click Upgrade en local
(faire très attention a bien modifier la table de ps_configuration on a vite fait de passer du local au site en production si on ne change pas PS_SHOP_DOMAIN)
il ne propose que de migrer vers 1.6 et pas 1.7
je tente le 1.6 peut être qu'il proposera ensuite le 1.7...
je suis maintenant en 1.6 mais il ne propose pas le 1.7
je regarde dans les fichiers et les bases je constate que je me traine pas mal de truc de 1.4 donc c'est pas ce que je souhaite.

Ok tant pis je pars sur un 1.7 d'origine, avec l'idée de d'importer mes bases en csv via le manager sql
 
Donc il faut effacer la boutique de démonstration de prestashop
 
- ok cool en théorie :
Vous devez donc effacer toutes les données par défaut, c'est à dire :
les produits et leurs...
catégories
attributs
caractéristiques
marques
fournisseurs
scènes
tags
les commandes
les messages liés aux commandes
les clients
leurs paniers
les transporteurs
les tranches de prix
les tranches de poids
Les infos de contact et les magasins (à effacer ou à adapter aux besoins de la boutique)
les pages de contenu statique (à effacer ou à adapter aux besoins de la boutique)
Cela supposerait que vous ayez à parcourir les nombreux écrans du back-office et supprimer votre contenu sur chaque écran, mais il y a une méthode bien plus facile :
Allez dans la page "Modules > Modules",
Trouvez le module "Nettoyage de la base de données" (PrestaShop Cleaner) et cliquez sur son bouton "Installation",
Vous êtes immédiatement envoyé sur sa page de configuration (si ce n'est pas le cas, cliquez sur son bouton "Configuration"),
Lisez et acceptez l'avertissement, puis cliquez sur le bouton "Effacer le catalogue" : il supprimera tous vos produits et vos attributs, vos fabricants, etc.
Lisez et acceptez l'avertissement, puis cliquez sur le bouton "Effacer les commandes et clients" : il supprimera toutes vos clients et leurs commandes, paniers, etc.
Cliquez sur le bouton "Vérifier et corriger" pour rétablir les contraintes d'intégrité de votre base de données,
Cliquez sur le bouton "Nettoyer et optimiser" pour réorganiser le stockage physique des données de vos tables et les index de données associées, afin de réduire l'espace de stockage et améliorer l'efficace de lecture/écriture lors de l'accès aux tables.
VOS MODIFICATIONS SONT DÉFINITIVES. Assurez-vous de ne cliquez sur ces boutons que si vous souhaitez vraiment effacer le contenu par défaut de votre base de données.
 
- en pratique maintenant :
je cherche le module dans l'administration Modules > Modules
Résultat pas de "PrestaShop Cleaner"
Je regarde dans le dossier module :
blockreassurance
contactform
dashactivity
dashgoals
dashproducts
dashtrends
followup
gamification
graphnvd3
gridhtml
pagesnotfound
ps_banner
ps_categorytree
ps_checkpayment
ps_contactinfo
ps_currencyselector
ps_customeraccountlinks
ps_customersignin
ps_customtext
ps_emailalerts
ps_emailsubscription
ps_facetedsearch
ps_featuredproducts
ps_imageslider
ps_languageselector
ps_legalcompliance
ps_linklist
ps_mainmenu
ps_searchbar
ps_sharebuttons
ps_shoppingcart
ps_socialfollow
ps_wirepayment
referralprogram
sekeywords
statsbestcategories
statsbestcustomers
statsbestmanufacturers
statsbestproducts
statsbestsuppliers
statsbestvouchers
statscarrier
statscatalog
statscheckup
statsdata
statsequipment
statsforecast
statslive
statsnewsletter
statsorigin
statspersonalinfos
statsproduct
statsregistrations
statssales
statssearch
statsstock
statsvisits
welcome
 
pas de module non plus
je verifie dans presta 1.7.1 - 1.7.2 - 1.7.3 - 1.7.4 rien...
donc comme le dis la notice en premier je commence à la main en parcourant le menu de l'administration
mais je ne peux pas supprimer les commandes du client John DOE ... mais faute de les supprimer je les annule.
donc forum
je vois que deux solutions :
1-use data import via .csv
2-https://github.com/PrestaShop/pscleaner
ne voyant aucune données officiels entre github.com/PrestaShop/pscleaner et prestashop j'abandonne
 
je pars donc sur l'import de l'administration de l'administration de prestashop
je crée mes fichiers .csv
 

Share this post


Link to post
Share on other sites
  • 0

Franchement je resterais encore en 1.6 quelque temps.

Tu fais la MAJ 1.4 -> 1.6 et quand le module de migration 1.6 -> 1.7 ne sera plus en béta et prestashop 1.7 plus stable tu sautes le pas.

Aucun soucis d'utiliser pscleaner il était d'ailleurs avant dans les archives des releases.

Un lien vers le module pour passer de la 1.6 à la 1.7 :

http://build.prestashop.com/news/updated-1-click-upgrade-module/ 

Share this post


Link to post
Share on other sites
  • 0

après la galère du manque d'info sur la 1.7, à l'usage en test, la 1.7 est plutôt réussi ... 

Pourquoi ps_cleaner n'est plus dans les archives ?

 1 click upgrade me laisse trop vieux code, je préfère passer sur du neuf a cause de la loi de Murphy ;)

Share this post


Link to post
Share on other sites
  • 0
/*
je n'arrive pas a trouver la bonne syntaxe ou mon erreur
dans wampserveur
wampserveurlocal_3.1.0 -> MySQL -> console MySQL ->
 
mes tests
mysql> -h localhost -u root -p 148 < C:/wamp64/www/testvariablesql/testconsole.sql > C:/wamp64/www/testvariablesql/out.csv;
retourne error syntaxe 1064 (42000) blabla à la ligne 1

mysql> -h localhost -u root 148 < C:/wamp64/www/testvariablesql/testconsole.sql > C:/wamp64/www/testvariablesql/out.csv;
error syntaxe 1064 (42000) blabla à la ligne 1

mysql> -h localhost -u root 148 < C:/wamp64/www/testvariablesql/testconsole.sql > C:/wamp64/www/testvariablesql/out.csv
retourne ->

mysql> 148 < C:/wamp64/www/testvariablesql/testconsole.sql > C:/wamp64/www/testvariablesql/out.csv;
error syntaxe 1064 (42000) blabla à la ligne 1

mysql> USE 148 < C:/wamp64/www/testvariablesql/testconsole.sql > C:/wamp64/www/testvariablesql/out.csv;
database changed
le fichier testconsole.sql
*/
SELECTp.`id_product` AS 'Product ID',@row_number :=CASEWHEN @product_no != @row_number THEN @row_number + 1ELSE 1END AS 'New Product ID',pl.`name` AS 'Name'FROM `ps_product` pCROSS JOIN (SELECT @product_no:= 0,@row_number:= 0) as tempLEFT JOIN `ps_product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = 2 )GROUP BY p.`id_product`HAVING p.`id_product` IS NOT NULLORDER BY p.`id_product` ASC

 

Share this post


Link to post
Share on other sites
  • 0
désolé je suis allé trop vite pour copier le texte de la requete...
 
test 1
mysql> 148 < C:/wamp64/www/testvariablesql/testconsole.sql > C:/wamp64/www/testvariablesql/out.csv;
ERROR 1064 (42000): Erreur de syntaxe près de '148 < C:/wamp64/www/testvariablesql/testconsole.sql > C:/wamp64/www/testvariable' à la ligne 1
test 2
mysql> -h localhost -u root 148 < C:/wamp64/www/testvariablesql/testconsole.sql > C:/wamp64/www/testvariablesql/out.csv;
ERROR 1064 (42000): Erreur de syntaxe près de '-h localhost -u root 148 < C:/wamp64/www/testvariablesql/testconsole.sql > C:/wa' à la ligne 1
 
je pense avoir un problème de syntaxe
si j'appelle ma base et que je passe la requete ça passe sauf pour l'export :
test 3
mysql> USE 148
Database changed
mysql> SELECT
    -> p.`id_product` AS 'Product ID',
    -> @row_number :=
    -> CASE
    -> WHEN @product_no != @row_number THEN @row_number + 1
    -> ELSE 1
    -> END AS 'New Product ID',
    -> pl.`name` AS 'Name'
    -> FROM `ps_product` p
    -> CROSS JOIN (SELECT @product_no:= 0,@row_number:= 0) as temp
    -> LEFT JOIN `ps_product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = 2 )
    -> GROUP BY p.`id_product`
    -> HAVING p.`id_product` IS NOT NULL
    -> ORDER BY p.`id_product` ASC ;
+------------+----------------+---------------------------+
| Product ID | New Product ID | Name              |
+------------+----------------+---------------------------+
|          2 |              1 | azerty                                       |
|          4 |              2 | uiopq                                       |
|          6 |              3 | sdfghjk                                    |
|          8 |              4 | lmwxcvb                                |
|          9 |              5 | nazer                                       |
|         10 |              6 | tyuuiop                                  |
|         11 |              7 | qsdfg                                       |
|         12 |              8 | hjklm                                      |
+------------+----------------+---------------------------+
8 rows in set (0.02 sec)
mysql> C:/wamp64/www/testvariablesql/out.csv;
ERROR 1064 (42000): Erreur de syntaxe près de 'C:/wamp64/www/testvariablesql/out.csv' à la ligne 1
mysql>
 

Share this post


Link to post
Share on other sites
  • 0

Je comprends, tu es dans le terminal mysql moi j'exécute directement, je ne connais pas la bonne ligne de commande pour windows.

Ca doit se trouver facilement. 

Share this post


Link to post
Share on other sites
  • 0
invite de commande windows
C:\wamp64\bin\mysql\mysql5.7.19\bin\mysql.exe -h localhost -u root MA_DB < C:\wamp64\www\testvariablesql\testconsole.sql > C:\wamp64\www\testvariablesql\out.csv

!!! il y a un problème sur les accents !!!

 

j'ai pas trouvé comment importer le fichier testconsole.sql
mais avec la console MySQL de wamp :
USE MA_DB 
SELECT 
p.`id_product` AS 'Product ID', 
@row_number := 
CASE 
WHEN @product_no != @row_number THEN @row_number + 1 
ELSE 1 
END AS 'New Product ID', 
pl.`name` AS 'Name' 
FROM `ps_product` p 
CROSS JOIN (SELECT @product_no:= 0,@row_number:= 0) as temp 
LEFT JOIN `ps_product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = 2 ) 
GROUP BY p.`id_product` 
HAVING p.`id_product` IS NOT NULL 
ORDER BY p.`id_product` ASC 
INTO OUTFILE 'c:/wamp64/tmp/out.csv';


La ça marche nickel
! il faut utiliser le dossier tmp car my.ini protège les autres dossiers ou modifier my.ini !

 

Est ce que quelqu'un sait, soit corriger les accents dans l'invite de commande windows
ou importer le fichier testconsole.sql dans la console MySQL de wamp ???

Share this post


Link to post
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

×