A l'instar de France2 avec Inquisitio, le forum MySQL a également son feuilleton de l'été :D
Version imprimable
A l'instar de France2 avec Inquisitio, le forum MySQL a également son feuilleton de l'été :D
Donc quand tu auras fini de corriger ton fichier CSV tout neuf, importe-le dans MySQL puis repasse les requêtes suivantes :
1) Y at-il des catégories inconnues de dbname.categories ?
2) Combien d'articles à importer ?Code:
1
2
3
4
5
6
7
8 SELECT DISTINCT t.CATEGORY FROM testbase.`table 1` t WHERE NOT EXISTS ( SELECT 1 FROM dbname.categories c WHERE c.NAME = t.CATEGORY )
3) Y a t-il des références d'articles existant déjà dans dbname.products ?Code:
1
2 SELECT COUNT(*) FROM testbase.`table 1`
4) Tous les articles sont-ils importables dans dbname.products ?Code:
1
2
3
4
5
6
7
8 SELECT p.ID, p.REFERENCE, p.CODE, p.NAME, t1.ID AS ID_import, t1.REFERENCE AS REF_IMPORT, t1.CODE AS CODE_IMPORT, t1.NAME AS NAME_IMPORT FROM dbname.products p INNER JOIN testbase.`table 1` t1 ON t1.REFERENCE = p.REFERENCE
Il doit ici y avoir normalement le même nombre de lignes qu'indiqué par la requête 2 et tu peux vérifier si les informations te semblent correctes, notamment les prix car je ne sais pas si avec ton nouveau fichier CSV il y aura toujours besoin de faire une opération sur les colonnes de prix.Code:
1
2
3
4
5
6
7 SELECT i.ID, i.REFERENCE, i.CODE, i.CODETYPE, i.NAME, CAST(LEFT(i.PRICEBUY, LENGTH(i.PRICEBUY) - 2) AS DECIMAL(10,2)) AS PRICEBUY, CAST(LEFT(i.PRICESELL, LENGTH(i.PRICESELL) - 2) AS DECIMAL(10,2)) AS PRICESELL, c.ID AS CATEGORY, i.TAXCAT, i.ATTRIBUTESET_ID, i.STOCKCOST, i.STOCKVOLUME, i.IMAGE, i.ISCOM, i.ISSCALE, i.ATTRIBUTES FROM testbase.`table 1` i INNER JOIN dbname.categories c ON c.NAME = i.CATEGORY
PS : 7ème page...
Affichage des lignes 0 - 29 ( 41 total, Traitement en 0.0261 sec)Citation:
1) Y at-il des catégories inconnues de dbname.categories ?
En fait, ça me refait comme la dernière fois, par exemple 'Cuillère' est coupé et il n'y a que 'Cuilli'. Dois-je retirer tous les accents et apostrophes dans le fichier d'importation?
--> problème d'encodage à l'enregistremetn du fichier apparement....Il est encodé en ANSI alors qu'il doit être en UTF-8
Effectivement, si ta BDD est en UTF8, il faudrait que le fichier csv le soit aussi sinon ça va être galère à importer.
Je suppose que tu es sous Windows, je ne sais pas si tu peux paramétrer ça avec un éditeur de texte fourni avec cette passoire à virus. :aie:
Un coup de :google: peut-être ?
En effet, je recherche une solution mais je n'ai pas trouvé. J'ai Notepad++, bloc-notes, et Microsoft office et OpenOfficeCitation:
Je suppose que tu es sous Windows, je ne sais pas si tu peux paramétrer ça avec un éditeur de texte fourni avec cette passoire à virus.
Un coup de google peut-être ?
mais problèmes :
- Notepad++ et Bloc-notes peuvent encoder en UTF-8 mais pas enregistrer en csv.
- Les 2 autres font l'inverse :s.
Et sous Mac, y'a-t-il une solution, un logiciel qui puisse tout faire?
Un fichier csv, c'est juste un fichier texte formaté d'une certaine manière. Tu dois pouvoir indiquer l'extension toi-même. Et à la limite, que ce soit l'extension csv, txt ou wxz pour importer dans MySQL, c'est pareil !
Ah beh dans ce cas là, j'ai un fichier txt encodé en UTF-8 :)Citation:
Et à la limite, que ce soit l'extension csv, txt ou wxz pour importer dans MySQL, c'est pareil !
En effet, j'ai 9 résultats. :sCitation:
1) Y at-il des catégories inconnues de dbname.categories ?
Tu l'as refait avec l'outil qui te permet d'encoder en UTF-8 ?Citation:
Ah beh dans ce cas là, j'ai un fichier txt encodé en UTF-8
Si oui, réimporte-le et vérifie s'il y a toujours les problèmes d'accents.
Identifie ces catégories manquantes, vérifie s'il s'agit encore de problème d'accent ou autre mauvaise orthographe et corrige les noms.Citation:
En effet, j'ai 9 résultats. :sCitation:
Envoyé par CinéPhil
Je peux dans le doute les ajouter dans dbname.categories, non? Où ces résultats viennent déjà de cette table?Citation:
Identifie ces catégories manquantes, vérifie s'il s'agit encore de problème d'accent ou autre mauvaise orthographe et corrige les noms.
MySQL a retourné un résultat vide (aucune ligne). ( Traitement en 0.0440 sec )Citation:
1) Y at-il des catégories inconnues de dbname.categories ?
9764Citation:
2) Combien d'articles à importer ?
MySQL a retourné un résultat vide (aucune ligne). ( Traitement en 0.0335 sec )Citation:
3) Y a t-il des références d'articles existant déjà dans dbname.products ?
Affichage des lignes 0 - 29 ( 9 764 total, Traitement en 0.0012 sec)Citation:
4) Tous les articles sont-ils importables dans dbname.products ?
Voilà voilà les résultats des requêtes, je pense que c'est correct, non?:$
Et une petite question s'il te plait? Pour la colonne CATEGORY de la table products, il faut les ID.categories et non les NAME.categories, ce n'est pas grave?:$
J'étais en réunion ce matin.
Apparemment, tu as corrigé correctement les données.
Puisque avec la requête 4 on a vérifié que tous les articles sont importables, on peut tenter l'importation.
Au préalable, une dernière vérification, peut-ere suivie d'une précaution.
La table dbname.products est-elle vide ?
Question complémentaire pour gagner du temps sur la suite : ta table d'importation s'appelle toujours bien testbase.`table 1` ?
Avec les données correctes dedans ?
Non puisque par jointure avec la table categories on va récupérer l'ID qui doit être inséré en clé étrangère dans la table products.Citation:
Et une petite question s'il te plait? Pour la colonne CATEGORY de la table products, il faut les ID.categories et non les NAME.categories, ce n'est pas grave?:$
Oui elle l'est.Citation:
La table dbname.products est-elle vide ?
Non elle se nomme testbase.'table 2'Citation:
Question complémentaire pour gagner du temps sur la suite : ta table d'importation s'appelle toujours bien testbase.`table 1` ?
Eh bien il y a juste dans le champs CATEGORY où j'ai les intitulés comme 'Jeu', 'Boite',... et non pas les ID de la table categories.dbname qui leur correponde :s.Citation:
Avec les données correctes dedans ?
Ça c'est normal et ce n'est pas du tout gênant, comme je l'ai expliqué dans mon précédent message :Citation:
Eh bien il y a juste dans le champs CATEGORY où j'ai les intitulés comme 'Jeu', 'Boite',... et non pas les ID de la table categories.dbname qui leur correponde :s.
C'est d'ailleurs ce que j'ai fait dans la requête 4.Citation:
Envoyé par CinéPhil
Une dernière vérification :
J'avais dû faire des opérations un peu bizarres parce que les prix de ton fichier CSV semblaient suivi du symbole monétaire. Est-ce toujours le cas et est-ce que les prix te semblent corrects dans le résultat de la requête 4 ?
Oui oui tout à fait, ils sont corrects mais par contre le signe € est présent et dans le logiciel quand on saisit un prix, dans la table, il ne met pas le signe € :s.Citation:
J'avais dû faire des opérations un peu bizarres parce que les prix de ton fichier CSV semblaient suivi du symbole monétaire. Est-ce toujours le cas et est-ce que les prix te semblent corrects dans le résultat de la requête 4 ?
Il est possible que ça cause un souci du coup, non?:s
Non c'est normal. Le prix est un nombre, de type DOUBLE dans la table (ce qui n'est d'ailleurs pas un très bon choix !). Ce n'est pas une chaîne de caractères composée de chiffres, d'un point et d'un symbole monétaire.
Que le logiciel affiche le symbole monétaire, c'est normal. Qu'il soit enregistré dans la même colonne que le prix, non.
On tente l'importation ?
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 INSERT INTO dbname.products ( ID, REFERENCE, CODE, CODETYPE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ATTRIBUTESET_ID, STOCKCOST, STOCKVOLUME, IMAGE, ISCOM, ISSCALE, ATTRIBUTES ) SELECT i.ID, i.REFERENCE, i.CODE, i.CODETYPE, i.NAME, CAST(LEFT(i.PRICEBUY, LENGTH(i.PRICEBUY) - 2) AS DECIMAL(10,2)) AS PRICEBUY, CAST(LEFT(i.PRICESELL, LENGTH(i.PRICESELL) - 2) AS DECIMAL(10,2)) AS PRICESELL, c.ID AS CATEGORY, i.TAXCAT, i.ATTRIBUTESET_ID, i.STOCKCOST, i.STOCKVOLUME, i.IMAGE, i.ISCOM, i.ISSCALE, i.ATTRIBUTES FROM testbase.`table 2` i INNER JOIN dbname.categories c ON c.NAME = i.CATEGORY ORDER BY ID
#1452 - Cannot add or update a child row: a foreign key constraint fails (`dbname`.`products`, CONSTRAINT `PRODUCTS_TAXCAT_FK` FOREIGN KEY (`TAXCAT`) REFERENCES `taxcategories` (`ID`))
Car je pense que c'est par rapport avec TAXCAT où moi j'ai un 0 et dans la table taxcategories, l'ID est 000 :s