IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Soucis avec une requête sur une table de 93 000 entrées


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut Soucis avec une requête sur une table de 93 000 entrées
    Bonjour,

    Je me permets de vous demander de l'aide car j'ai un soucis avec un catalogue produit que j'ai mis en base de données qui contient plus de 93 000 lignes. A chaque interrogation des produits dans une rubrique, il parcourt toute la table, ce qui fait monter en charge le serveur. Auriez-vous des conseils d'optimisation ?

    Voici ma table :


    et la requête en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT sku,name,url_image,`merchant_store_name`,`merchant_univers_name`, `merchant_category_name`,`merchant_department_name` 
    FROM `conrad2` 
    WHERE `merchant_store_name` LIKE 'Composants%Electroniques' 
    LIMIT 0,30
    Merci d'avance pour votre aide
    Ludo

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    La structure de la table serait améliorable mais on va faire avec.

    Ce qui fait que la requête n'utilise pas l'index, c'est la condition de restriction (WHERE) avec le caractère générique % au milieu du terme à rechercher.

    WHERE merchant_store_name LIKE 'Composants%' peut utiliser l'index parce qu'on demande de trouver les merchant_store_name qui commencent par 'Composants' donc c'est compatible avec l'ordre alphabétique de l'index mais trouver ce qui commence par 'Composants' et qui finit par 'Electroniques', il ne sait pas faire.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    Merci pour ta réponse. La table, je peux éventuellement la modifier, ce n'est pas gênant ça.

    Le % de la requête vient du fait que la catégorie vient de l'url qui est récrite tous les caractères " ", "/", "&" sont modifiés par "-" d’où la mise en place "%" dans la requête. Y aurait-il une autre méthode ?

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    La table, je peux éventuellement la modifier, ce n'est pas gênant ça.
    Je pensais qu'il s'agissait d'un logiciel avec une BDD toute faite que vous ne pouviez pas modifier.
    Idéalement, il faudrait une table pour les merchant_store_name, une autre pour les merchant_univers_name, encore une pour les merchant_category_name et une enfin pour les merchant_department_name.

    La table que vous nous présentez devrait avoir des clés étrangères pointant vers ces tables de référence.

    Le % de la requête vient du fait que la catégorie vient de l'url qui est récrite tous les caractères " ", "/", "&" sont modifiés par "-" d’où la mise en place "%" dans la requête.
    Quel libellé est stocké en BDD ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    Ben en fait, c'est un fichier CSV que je récupère d'une régie d'affiliation.
    Les catégories, sous-catégories, sous-sous-categories... sont stockées sur les colonnes merchant_store_name,merchant_univers_name, merchant_category_name,merchant_department_name.

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    La meilleure méthode consisterait quand même à répartir les données de ces fichiers CSV dans une base de données correctement modélisée.

    Pour la requête, il vaut mieux demander le libellé exact stocké en BDD plutôt qu'avec un caractère générique donc transformer ce qui est récupéré en format compatible avec les libellés réels.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    ok je comprends mais comment transformer ce fichier CSV en plusieurs du coup ?

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Il faut commencer par monter un modèle de données en déterminant au préalable les règles de gestion des données qui permettront de dessiner un MCD.

    Ensuite, on importe le fichier CSV brute dans une nouvelle table puis on exécute une série de requêtes pour répartir les données de cette table d'import vers les différentes tables de la BDD normalisée qu'on a construite.

    Il faudra que j'écrive un billet de blog un jour sur le sujet car la question revient souvent. Ça doit être fait méthodiquement et avec des vérifications entre les données réparties et les données d'origine.

    Une fois qu'on l'a fait une fois, si on doit importer le même genre de données dans la même base de données, il suffit de compiler les requêtes dans un fichier SQL en les adaptant légèrement afin de ne pas écraser les données existantes puis de soumettre au SGBD le fichier SQL pour que l'import soit automatique.

    Mais la première étape décrite dans ce message sort du cadre de ce forum. Si tu veux te lancer dans la réalisation d'une BDD propre, je t'invite à rejoindre le forum Schéma.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    merci beaucoup

    la première étape ce n'est pas trop un soucis pour ma part c'est plutôt le reste qui me pause problème en faite

    sinon autre question : existe t'il un script, une commande permettant de voir le script ou la requete qui consomme trop sur un serveur dédié ? car je peux peut etre optimisé ailleurs

  10. #10
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    conrad est ton ami
    c'est pas forcément les moins chers coté composant ou matériels

    oui lis ça qui t'explique comment utiliser le log qui liste les requête lentes

    pour la normalisation des tables, le principe est simple:
    tu dégage les colonnes (principalement si c'est du texte) dont les valeurs sont répétitives pour compacter la table principale (ce n'est pas pertinent pour un nombre vu que la référence qui le remplacerait serait un nombre aussi)

    un exemple: un composant a un type (résistance, condensateur,...) et une marque qui sont typiquement des colonnes répétitives qu'il convient donc de mettre dans un table à part...

    comme le dit cinephil tu mets ton csv dans une table temporaire puis tu en dispatche le contenu grâce un à script (procédure sql ou php) dans les diverses tables de ta bd...

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    salut,
    oui effectivement conrad est mon ami je suis d'accord avec toi mais cela fonctionne très bien
    bon ben je vais tenter de me débrouiller avec tout ça j'ai voulu aller au plus vite et resultat c'est la cata...
    je vais voir comment je me sort de cette galere

  12. #12
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    selectronic est plus spécialisé

    sinon le csv est juste un listing bourrin en clair et le but c'est de redécouper simplement...

    tu identifies les colonnes qui contiennent des valeurs répétives (attention le prix n'est pas concerné par ce processus même s'il y a des valeurs répétitives): en gros imagine ton csv comme un formulaire, toutes les colonnes ou tu peux n'avoir qu'une liste déroulante sont à mettre dans une table à part

    en gros:
    • tu crées une table d'import avec les colonnes correspondant au csv
    • tu crées la table principale et les tables liées
    • tu listes les valeurs unique de chaque colonnes répétitives pour remplir la table liée concernée
    • tu remplis la table principale avec les valeur non répétitives et avec celles qui le sont tu les remplaces par l'identifiant correspondant dans la table liée (de jolies petites jointures)

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    oui mais pas d’affiliation chez selectronic aussi

    bon j'ai commencé à bosser sur le sujet voici le début des tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    CREATE TABLE IF NOT EXISTS `conrad2` (
      `sku` int(11) NOT NULL,
      `name` varchar(255) NOT NULL,
      `url_product` varchar(255) NOT NULL,
      `url_image` varchar(255) NOT NULL,
      `description` text NOT NULL,
      `merchant_store_name` int(5) NOT NULL,
      `merchant_univers_name` varchar(255) NOT NULL,
      `merchant_category_name` varchar(255) NOT NULL,
      `merchant_department_name` varchar(255) NOT NULL,
      `price` varchar(7) NOT NULL,
      PRIMARY KEY (`sku`),
      KEY `merchant_store_name` (`merchant_store_name`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    CREATE TABLE IF NOT EXISTS `conrad_merchant_store_name` (
      `id_merchant_store_name` int(10) NOT NULL AUTO_INCREMENT,
      `merchant_store_name` varchar(100) NOT NULL,
      PRIMARY KEY (`id_merchant_store_name`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1  ;
    est ce bon ? j'aurais tendance à dire oui car si je fais ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    explain SELECT c.sku,c.name,c.url_product,c.url_image,m.merchant_store_name FROM conrad2 AS C, conrad_merchant_store_name as m  WHERE c.merchant_store_name = 4 and c.merchant_store_name = m.id_merchant_store_name
    il ne parcourt plus toute la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    d	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
    1	SIMPLE	m	const	PRIMARY	PRIMARY	4	const	1	 
    1	SIMPLE	C	ref	merchant_store_name	merchant_store_name	4	const	7215
    je vais faire la même chose sur les colonnes :
    `merchant_univers_name` varchar(255) NOT NULL,
    `merchant_category_name` varchar(255) NOT NULL,
    `merchant_department_name` varchar(255) NOT NULL,

    mais il faut faire une moulinette pour pas faire d'erreur

  14. #14
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    C'est pas terrible ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     `merchant_store_name` int(5) NOT NULL,
    ...
     `id_merchant_store_name` int(10) NOT NULL AUTO_INCREMENT,
    Tu devrais mettre "`id_merchant_store_name`" et "int(10)" partout.


    Ta requête initiale et celle que tu viens de tester étant différentes, tu ne peux en déduire aucune conclusion.

    Personnellement, je ne comprends pas pourquoi WHERE `merchant_store_name` LIKE 'Composants%Electroniques' n'utilise pas d'index. Tu utilises une vieille version de MySQL ?

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    effectivement pas fait attention je vais corriger cela

    la version sur mon serveur est une 5.0.67

  16. #16
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Citation Envoyé par Fred_34 Voir le message
    Personnellement, je ne comprends pas pourquoi WHERE `merchant_store_name` LIKE 'Composants%Electroniques' n'utilise pas d'index. Tu utilises une vieille version de MySQL ?
    Car il ne peut pas.

    le cas ou il pourrait est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ma_col like 'debut%'
    edit : voir le msg de Cinephil en début de thread

  17. #17
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Citation Envoyé par punkoff Voir le message
    Car il ne peut pas.

    le cas ou il pourrait est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ma_col like 'debut%'
    edit : voir le msg de Cinephil en début de thread
    Voici un extrait de la doc :
    The index also can be used for LIKE comparisons if the argument to LIKE is a constant string that does not start with a wildcard character. For example, the following SELECT statements use indexes:

    SELECT * FROM tbl_name WHERE key_col LIKE 'Patrick%';
    SELECT * FROM tbl_name WHERE key_col LIKE 'Pat%_ck%';

    Le cas ou il ne peut pas est uniquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ma_col like '%fin'

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    cela fonctionne mais cela consomme énormement de ressource et ça sature mon serveur

  19. #19
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    tu peux virer les valeur entre parenthèse ça ne fait que limiter l'affichage pas la taille de la valeur pour les entiers, c'est pas comme sous oracle...

    utilise du unsigned pour ne pas perdre les valeurs négatives... et un entier dimensionné au mieux:
    • tinyint unsigned, 1 octet
    • smallint unsigned, 2 octets
    • mediumint unsigned, 3 octets
    • int unsigned, 4 octets
    • bigint unsigned 8 octets


    dans tes tables mets toutes les valeurs numériques au début et notamment les index en premier ça lui permet d'accéder à ça en une fois sans piocher à différents endroit de la ligne...

    utilise une table temporaire avec engine=memory pour l'import, pas d'index dessus pour commencer

    idéalement fait ça dans une procédure stockée vu qu'en fait là le but est d'éviter de bouffer de la bp à s'envoyer pour rien les données pour les brasser en php alors que tu peux le faire en mysql pur... le seul avantage de php serait de faire un truc générique quasi auto mais le générique est rarement performant...

    ici ce que tu vas devoir externaliser dans des tables c'est les colonnes qui commences par merchant:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    delimiter $$
    drop procedure if exists import_conrad2$$
    create procedure import_conrad2()
    begin
    	#on se crée la table d'import
    	drop table `import_conrad2`;
    	CREATE TABLE `import_conrad2`(
    	  `sku`								mediumint unsigned NOT NULL auto_increment,
    	  `name`								varchar(255) NOT NULL,
    	  `url_product`					varchar(255) NOT NULL,
    	  `url_image`						varchar(255) NOT NULL,
    	  `description`					text NOT NULL,
    	  `merchant_store_name`			varchar(255) NOT NULL,
    	  `merchant_univers_name`		varchar(255) NOT NULL,
    	  `merchant_category_name`		varchar(255) NOT NULL,
    	  `merchant_department_name`	varchar(255) NOT NULL,
    	  `price`							varchar(7) NOT NULL,
    	  PRIMARY KEY (`sku`)
    	)engine=memory auto_increment=1;
     
    	#ici tu colles ton load, il faut que le fichier soit sur le même serveur que mysql et accessible par lui
     
    	#on désactive le controle d'intégrité référentiel
    	SET FOREIGN_KEY_CHECKS=0;
     
    	#on recrée et remplit la table `store_name`
    	drop table `store_name`;
    	create table `store_name`(
    		id tinyint unsigned NOT NULL auto_increment,
    		name	varchar(255) not null,
    		constraint pk_store primary key(id)
    	)engine=innodb auto_increment=1;
    	insert into `store_name`(`name`)
    	select unique `merchant_store_name`
    	from `import_conrad2`
    	order by `merchant_store_name`;
     
    	#on recrée et remplit la table `univers_name`
    	drop table `univers_name`;
    	create table `univers_name`(
    		id tinyint unsigned NOT NULL auto_increment,
    		name	varchar(255) not null,
    		constraint pk_univers primary key(id)
    	)engine=innodb auto_increment=1;
    	insert into `univers_name`(`name`)
    	select unique `merchant_univers_name`
    	from `import_conrad2`
    	order by `merchant_univers_name`;
     
    	#on recrée et remplit la table `merchant_category_name`
    	drop table `category_name`;
    	create table `category_name`(
    		id tinyint unsigned NOT NULL auto_increment,
    		name	varchar(255) not null,
    		constraint pk_category primary key(id)
    	)engine=innodb auto_increment=1;
    	insert into `category_name`(`name`)
    	select unique `merchant_category_name`
    	from `import_conrad2`
    	order by `merchant_category_name`;
     
    	#on recrée et remplit la table `store_name`
    	drop table `department_name`;
    	create table `department_name`(
    		id tinyint unsigned NOT NULL auto_increment,
    		name	varchar(255) not null,
    		constraint pk_department primary key(id)
    	)engine=innodb auto_increment=1;
    	insert into `department_name`(`name`)
    	select unique `merchant_department_name`
    	from `import_conrad2`
    	order by `merchant_department_name`;
     
    	#on recrée enfin la table principale
    	drop table `conrad2`;
    	create table `conrad2`(
    	  `sku`				mediumint unsigned NOT NULL auto_increment,
    	  `id_store`		tinyint unsigned NOT NULL,
    	  `id_univers`		tinyint unsigned NOT NULL,
    	  `id_category`	tinyint unsigned NOT NULL,
    	  `id_department`	tinyint unsigned NOT NULL,
    	  `name`				varchar(255) NOT NULL,
    	  `url_product`	varchar(255) NOT NULL,
    	  `url_image`		varchar(255) NOT NULL,
    	  `price` 			varchar(7) NOT NULL,
    	  `description`	text NOT NULL,
    	  constraint pk_conrad2 PRIMARY KEY (`sku`)
    	)engine=memory auto_increment=1;
    	insert into `conrad2`(`sku`,`id_store`,`id_univers`,`id_category`,`id_department`,
    		`name`,`url_product`,`url_image`,`price`,`description`)
    	select i.sku,s.id,u.id,c.id,d.id,i.name,i.url_product,i.url_image,i.price,i.description
    	from `import_conrad2` i
    	left join `store_name` s on s.name=i.`merchant_store_name`
    	left join `univers_name` u on u.name=i.`merchant_univers_name`
    	left join `category_name` c on c.name=i.`merchant_category_name`
    	left join `department_name` d on d.name=i.`merchant_department_name`;
    end$$
     
    delimiter ;
    je pars sur le principe que tu as un dédié ou un vps au minimum vu ton site que j'ai été voir
    j'ai pas testé mais ça doit marcher... faut que tu rajoutes à l'endroit indiqué le load qui va bien qui chargera le csv

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    et bien merci pour ton script même si entre temps j'ai reussi à le faire via des commandes php en local j'ai voulu tester la requete mais cela bloque sur mon load
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LOAD DATA  INFILE 'C:\\Users\\Aureludo\\Downloads\\products_405031954 (2).csv'
    INTO TABLE  import_conrad2
    FIELDS TERMINATED BY '|';
    j'ai l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1314 - LOAD DATA is not allowed in stored procedures
    je fais cela en local via Wamp

    effectivement j'ai bien un serveur virtuel qui a plusieurs sites dessus

Discussions similaires

  1. Remplacer une requête sur une class par une valeur constante ?
    Par Lillie CHARLOTTE dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 02/06/2015, 09h59
  2. [Toutes versions] Faire en VBA une requête sur une requête paramétrée
    Par guidav dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/02/2012, 17h10
  3. Réponses: 1
    Dernier message: 30/08/2011, 09h53
  4. Tri d'une requête sur une valeur ou une autre
    Par mims1664 dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/08/2009, 17h40
  5. probleme avec l'appui sur une touche sur une jframe ou jdialog
    Par jeanfeu dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 05/08/2008, 16h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo