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

 MySQL Discussion :

Reformater du CSV avec PHP ?


Sujet :

MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Mai 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Graphiste

    Informations forums :
    Inscription : Mai 2016
    Messages : 7
    Points : 18
    Points
    18
    Par défaut Reformater du CSV avec PHP ?
    Salutatous,

    Sous PhpMyAdmin (onglet SQL) je lance une requête sur la bdd de notre boutique Prestashop qui me permet d'obtenir un fichier csv à 3 colonnes, comme ceci :

    id produit | produit | caracteristiques
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    1 | livre A | Hauteur cm >> 30 // Largeur cm >> 21 // Poids kg >> 3 // Auteur >> Fabrice Poulain // ISBN >> 9782914817478 // Pages >> 480 // Parution >> 2010-04-17 // Couverture >> Rigide // Editeur >> Rossolis
    2 | livre B | Hauteur cm >> 20 // Largeur cm >> 20 // Poids kg >> 1 // Auteur >> Fabrice Dupont // ISBN >> 9782914817452 // Pages >> 124 // Parution >> 2016-05-25 // Couverture >> Souple // Editeur >> Ulmer
    3 | livre C | Hauteur cm >> 15 // Largeur cm >> 10 // Poids kg >> 2 // Auteur >> Fabrice Acotede // ISBN >> 9782914817436 // Pages >> 248 // Parution >> 2014-12-02 // Couverture >> Souple // Editeur >> Biotope
    etc


    ++++++++++++++++++++++++++


    On m'a dit qu'il était possible de "reformater" le fichier CSV grâce à PHP, et toujours grâce à PHP, de le ré-exporter en CSV reformaté !

    Je souhaiterait donc pouvoir obtenir au final un fichier CSV reformaté comme ceci :

    id produit | produit | Hauteur cm | Largeur cm | Poids kg | Auteur | ISBN | Pages | Parution | Couverture | Editeur
    --------------------------------------------------------------------------------------------------------------------------------------------------------------
    1 | livre A | 30 | 21 | 3 | Fabrice Poulain | 9782914817478 | 480 | 2010-04-17 | Rigide | Rossolis
    2 | livre B | 20 | 20 | 1 | Fabrice Dupont | 9782914817452 | 124 | 2016-05-25 | Souple | Ulmer
    3 | livre C | 15 | 10 | 2 | Fabrice Acotede | 9782914817436 | 248 | 2014-12-02 | Souple | Biotope
    etc


    ++++++++++++++++++++++++++


    Pour info voici la requête que j'utilise au départ dans PhpMyAdmin :

    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
     
    SELECT 
    	fp.id_product AS "id produit",
    	pl.name AS "produit",
    	GROUP_CONCAT(DISTINCT(concat(fl.name,' >> ',fvl.value)) SEPARATOR " // ") AS "caracteristiques"
     
     
    FROM feature_product fp
     
    LEFT JOIN feature_lang fl ON (fl.id_feature = fp.id_feature)
    LEFT JOIN feature_value_lang fvl ON (fvl.id_feature_value = fp.id_feature_value AND fl.id_lang = 4)
    LEFT JOIN product_lang pl ON (fp.id_product = pl.id_product) 
     
    WHERE 1 AND fvl.id_lang = 4
    GROUP BY fp.id_product 
    ORDER BY pl.name ASC

    ++++++++++++++++++++++++++


    Merci d'avance de vos lumières
    Nico

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,


    Le plus simple serait sans doute de modifier la requete pour qu'elle donne directement le résultat voulu :
    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
     
    SELECT 
    	fp.id_product AS "id produit",
    	pl.name AS "produit",
    	MAX(CASE WHEN fl.name = 'Hauteur cm' THEN fvl.value END) AS  `Hauteur cm`
    	MAX(CASE WHEN fl.name = 'Largeur cm ' THEN fvl.value END) AS `Largeur cm`
    	MAX(CASE WHEN fl.name = 'Poids kg ' THEN fvl.value END) AS `Poids kg`
    	MAX(CASE WHEN fl.name = 'Auteur' THEN fvl.value END) AS `Auteur`
    	MAX(CASE WHEN fl.name = 'ISBN' THEN fvl.value END) AS `ISBN`
    	MAX(CASE WHEN fl.name = 'Pages' THEN fvl.value END) AS `Pages`
    	MAX(CASE WHEN fl.name = 'Parution' THEN fvl.value END) AS `Parution`
    	MAX(CASE WHEN fl.name = 'Couverture' THEN fvl.value END) AS `Couverture`
    	MAX(CASE WHEN fl.name = 'Editeur' THEN fvl.value END) AS `Editeur` 
    FROM feature_product fp 
    LEFT JOIN feature_lang fl ON (fl.id_feature = fp.id_feature)
    LEFT JOIN feature_value_lang fvl ON (fvl.id_feature_value = fp.id_feature_value AND fl.id_lang = 4)
    LEFT JOIN product_lang pl ON (fp.id_product = pl.id_product) 
     
    WHERE 1 AND fvl.id_lang = 4
    GROUP BY fp.id_product , pl.name
    ORDER BY pl.name ASC

  3. #3
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut à tous.

    Tu m'as devancé aieeeuuuuu !
    En effet, c'est la bonne façon de procéder, et c'est ta solution que je recommande à Bioto.

    A titre indicatif, je donne une autre solution, en partant de la table à trois colonnes idProduit, produit, caracteristique.
    En espérant que cela peut servir à quelqu'un d'autre, pour un problème similaire.
    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
    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
     
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    (
      `idProduit`       integer unsigned NOT NULL AUTO_INCREMENT primary key,
      `produit`         varchar(255)     NOT NULL,
      `caracteristique` varchar(255)     NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    INSERT INTO `test` (`idProduit`,`produit`,`caracteristique`) VALUES
      (1, 'livre A', 'Hauteur cm >> 30 // Largeur cm >> 21 // Poids kg >> 3 // Auteur >> Fabrice Poulain // ISBN >> 9782914817478 // Pages >> 480 // Parution >> 2010-04-17 // Couverture >> Rigide // Editeur >> Rossolis'),
      (2, 'livre B', 'Hauteur cm >> 20 // Largeur cm >> 20 // Poids kg >> 1 // Auteur >> Fabrice Dupont // ISBN >> 9782914817452 // Pages >> 124 // Parution >> 2016-05-25 // Couverture >> Souple // Editeur >> Ulmer'),
      (3, 'livre C', 'Hauteur cm >> 15 // Largeur cm >> 10 // Poids kg >> 2 // Auteur >> Fabrice Acotede // ISBN >> 9782914817436 // Pages >> 248 // Parution >> 2014-12-02 // Couverture >> Souple // Editeur >> Biotope')
    --------------
     
    --------------
    select * from test
    --------------
     
    +-----------+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | idProduit | produit | caracteristique                                                                                                                                                                                      |
    +-----------+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    |         1 | livre A | Hauteur cm >> 30 // Largeur cm >> 21 // Poids kg >> 3 // Auteur >> Fabrice Poulain // ISBN >> 9782914817478 // Pages >> 480 // Parution >> 2010-04-17 // Couverture >> Rigide // Editeur >> Rossolis |
    |         2 | livre B | Hauteur cm >> 20 // Largeur cm >> 20 // Poids kg >> 1 // Auteur >> Fabrice Dupont // ISBN >> 9782914817452 // Pages >> 124 // Parution >> 2016-05-25 // Couverture >> Souple // Editeur >> Ulmer     |
    |         3 | livre C | Hauteur cm >> 15 // Largeur cm >> 10 // Poids kg >> 2 // Auteur >> Fabrice Acotede // ISBN >> 9782914817436 // Pages >> 248 // Parution >> 2014-12-02 // Couverture >> Souple // Editeur >> Biotope  |
    +-----------+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    --------------
    select idProduit,
           produit,
           SUBSTRING_INDEX(SUBSTRING_INDEX(caracteristique,' // ',1),' >> ',-1) as 'Hauteur cm',
           SUBSTRING_INDEX(SUBSTRING_INDEX(caracteristique,' // ',2),' >> ',-1) as 'Largeur cm',
           SUBSTRING_INDEX(SUBSTRING_INDEX(caracteristique,' // ',3),' >> ',-1) as 'Poids kg',
           SUBSTRING_INDEX(SUBSTRING_INDEX(caracteristique,' // ',4),' >> ',-1) as 'Auteur',
           SUBSTRING_INDEX(SUBSTRING_INDEX(caracteristique,' // ',5),' >> ',-1) as 'ISBN',
           SUBSTRING_INDEX(SUBSTRING_INDEX(caracteristique,' // ',6),' >> ',-1) as 'Pages',
           SUBSTRING_INDEX(SUBSTRING_INDEX(caracteristique,' // ',7),' >> ',-1) as 'Parution',
           SUBSTRING_INDEX(SUBSTRING_INDEX(caracteristique,' // ',8),' >> ',-1) as 'Couverture',
           SUBSTRING_INDEX(SUBSTRING_INDEX(caracteristique,' // ',9),' >> ',-1) as 'Editeur'
    from test
    --------------
     
    +-----------+---------+------------+------------+----------+-----------------+---------------+-------+------------+------------+----------+
    | idProduit | produit | Hauteur cm | Largeur cm | Poids kg | Auteur          | ISBN          | Pages | Parution   | Couverture | Editeur  |
    +-----------+---------+------------+------------+----------+-----------------+---------------+-------+------------+------------+----------+
    |         1 | livre A | 30         | 21         | 3        | Fabrice Poulain | 9782914817478 | 480   | 2010-04-17 | Rigide     | Rossolis |
    |         2 | livre B | 20         | 20         | 1        | Fabrice Dupont  | 9782914817452 | 124   | 2016-05-25 | Souple     | Ulmer    |
    |         3 | livre C | 15         | 10         | 2        | Fabrice Acotede | 9782914817436 | 248   | 2014-12-02 | Souple     | Biotope  |
    +-----------+---------+------------+------------+----------+-----------------+---------------+-------+------------+------------+----------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  4. #4
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Mai 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Graphiste

    Informations forums :
    Inscription : Mai 2016
    Messages : 7
    Points : 18
    Points
    18
    Par défaut
    Merci pour vos réponses

    Effectivement c'est plus direct en passant par la bonne requête sql mais mes limites en ce domaine ne me l'ont pas permis !

    aieeeuuuuu, sous PhpMyAdmin, quand je rentre votre requête j'ai le message d'erreur suivant :

    #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 'MAX(CASE WHEN fl.name = 'Largeur cm' THEN fvl.value END) AS `Largeur cm` MAX(CA' at line 5

  5. #5
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Mai 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Graphiste

    Informations forums :
    Inscription : Mai 2016
    Messages : 7
    Points : 18
    Points
    18
    Par défaut
    J'ai trouvé, c'est parce que il manquait la virgule en fin des lignes "MAX(CASE WHEN..."

    Voici le code avec les virgules :

    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
    22
    23
     
    SELECT 
    	fp.id_product AS "id produit",
    	pl.name AS "produit",
    	MAX(CASE WHEN fl.name = 'Hauteur cm' THEN fvl.value END) AS  `Hauteur cm`,
    	MAX(CASE WHEN fl.name = 'Largeur cm' THEN fvl.value END) AS `Largeur cm`,
    	MAX(CASE WHEN fl.name = 'Poids kg' THEN fvl.value END) AS `Poids kg`,
    	MAX(CASE WHEN fl.name = 'Auteur' THEN fvl.value END) AS `Auteur`,
    	MAX(CASE WHEN fl.name = 'ISBN' THEN fvl.value END) AS `ISBN`,
    	MAX(CASE WHEN fl.name = 'Pages' THEN fvl.value END) AS `Pages`,
    	MAX(CASE WHEN fl.name = 'Parution' THEN fvl.value END) AS `Parution`,
    	MAX(CASE WHEN fl.name = 'Couverture' THEN fvl.value END) AS `Couverture`,
    	MAX(CASE WHEN fl.name = 'Editeur' THEN fvl.value END) AS `Editeur` 
     
    FROM feature_product fp 
     
    LEFT JOIN feature_lang fl ON (fl.id_feature = fp.id_feature)
    LEFT JOIN feature_value_lang fvl ON (fvl.id_feature_value = fp.id_feature_value AND fl.id_lang = 4)
    LEFT JOIN product_lang pl ON (fp.id_product = pl.id_product) 
     
    WHERE 1 AND fvl.id_lang = 4
    GROUP BY fp.id_product , pl.name
    ORDER BY pl.name ASC
    Pour info le CSV obtenu va me permettre d'importer les données en dynamique dans une maquette inDesign pour générer un catalogue de produit.

    Un grand grand merci

  6. #6
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Mai 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Graphiste

    Informations forums :
    Inscription : Mai 2016
    Messages : 7
    Points : 18
    Points
    18
    Par défaut
    Juste une petite question de compréhension :

    Concernant le "WHERE 1" :
    le "1" signifie-t-il qu'on cible tous les produits actif ?

    Car si je remplace par "WHERE p.active = 1" ça m'affiche la même chose !

  7. #7
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut bioto.

    where 1 seul, sert à faire apparaître cette clause dans une requête alors que vous pouvez ne pas la mettre.
    Le "1" signifie "true" ou en français "vrai". Donc la condition est toujours "vrai".
    Il n'y a aucune restriction sur la sélection que vous faites.

    Dans votre premier message, vous avez mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE 1 AND fvl.id_lang = 4
    Cela peut se simplifier en :
    Pour la condition, "vrai et n'importe quoi" est équivalent à "n'importe quoi". C'est de la logique binaire.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  8. #8
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Mai 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Graphiste

    Informations forums :
    Inscription : Mai 2016
    Messages : 7
    Points : 18
    Points
    18
    Par défaut
    Ok merci Artemus

  9. #9
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Mai 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Graphiste

    Informations forums :
    Inscription : Mai 2016
    Messages : 7
    Points : 18
    Points
    18
    Par défaut
    Nouvelle interrogation :

    J'ai modifié la requête comme suit afin d'ajouter un nouveau critère de recherche sur une des caractéristiques (cf lignes 20 et 37 ci-dessous) :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    SELECT 
    	cl.name AS 'categorie',
    	pl.name AS 'produit',
    	ROUND(p.price*1.055, 2) AS 'prix TTC',
     
    	MAX(CASE WHEN fl.name = 'Auteur :' THEN fvl.value END) AS 'auteur',
    	MAX(CASE WHEN fl.name = 'Editeur :' THEN fvl.value END) AS 'editeur',
     
    	MAX(CASE WHEN fl.name = 'Largeur en cm :' THEN fvl.value END) AS 'largeur cm',
    	MAX(CASE WHEN fl.name = 'Hauteur en cm :' THEN fvl.value END) AS  'hauteur cm',
     
    	MAX(CASE WHEN fl.name = 'ISBN :' THEN fvl.value END) AS 'ISBN',
     
    	MAX(CASE WHEN fl.name = 'Nombre de pages :' THEN fvl.value END) AS 'pages',
     
    	MAX(CASE WHEN fl.name = 'Reliure :' THEN fvl.value END) AS 'reliure',
    	MAX(CASE WHEN fl.name = 'Type de couverture :' THEN fvl.value END) AS 'couverture',
     
    	MAX(CASE WHEN fl.name = 'Au catalogue :' THEN fvl.value END) AS 'au catalogue',
     
    	CONCAT(fp.id_product,'.jpg') AS 'nom image'
     
    FROM feature_product fp 
     
    LEFT JOIN feature_lang fl ON (fl.id_feature = fp.id_feature)
    LEFT JOIN feature_value_lang fvl ON (fvl.id_feature_value = fp.id_feature_value AND fl.id_lang = 4)
    LEFT JOIN product_lang pl ON (fp.id_product = pl.id_product)
     
    LEFT JOIN product p ON (pl.id_product = p.id_product)
    LEFT JOIN category_lang cl ON (p.id_category_default = cl.id_category AND cl.id_lang = 4)  
     
    WHERE
    fvl.id_lang = 4
    AND p.active = 1
    AND p.id_tax_rules_group = 3
    AND (CASE WHEN fl.name = 'Au catalogue :' THEN fvl.value END = 'oui')
     
    GROUP BY fp.id_product, pl.name
    ORDER BY cl.name ASC, pl.name ASC
    Ca m'affiche bien les produits qui ont pour valeur "oui" pour la caractéristique "Au catalogue :"
    par contre j'obtiens des "NULL" dans la plupart des cellules de colonnes !!!

  10. #10
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut bioto.

    Citation Envoyé par bioto
    J'ai modifié la requête comme suit afin d'ajouter un nouveau critère de recherche sur une des caractéristiques (cf lignes 20 et 37 ci-dessous) :
    Pour la ligne 20 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MAX(CASE WHEN fl.name = 'Au catalogue :' THEN fvl.value END) AS 'au catalogue',
    elle me semble au premier abord correcte, car elle est construite comme les autres case.
    Pour la ligne 37 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND (CASE WHEN fl.name = 'Au catalogue :' THEN fvl.value END = 'oui')
    là, c'est du grand n'importe quoi.

    Que cherches-tu à faire à la ligne 37 ?
    Si tu supprimes la ligne 37, normalement, tu n'auras plus les autres colonnes à null.

    A bien te comprendre, tu veux récupérer que les lignes extraites de ta requête ayant "Au catalogue" à "OUI". Est-ce bien cela ?

    Je n'ai pas testé, mais essaye de faire les choses suivantes :
    1) remplaces tes alias ("as") par des noms sans espaces, en mettant un souligné. Exemple : "as 'au catalogue'" par "as au_catalogue".
    2) tu supprimes la ligne 37.
    2) juste avant le "group by", tu mets ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    having au_catalogue = 'oui'
    En espérant que c'est la bonne solution.

    Si cette solution ne fonctionne pas, alors prend ta requête et tu en fais une sous-requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select *
    from ( tu places ici ta requête
    ) as x
    where au_catalogue = 'oui'
    ;
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  11. #11
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Mai 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Graphiste

    Informations forums :
    Inscription : Mai 2016
    Messages : 7
    Points : 18
    Points
    18
    Par défaut
    Bonjour Artemus,

    En ajoutant le "having" juste AVANT le "group by", j'avais le message suivant :

    #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 'GROUP BY fp.id_product, pl.name ORDER BY cl.name ASC, pl.name ASC LIMIT 0, 30' at line 38
    En cherchant dans les tutos de Developpez.com, j'ai vu qu'il fallait placer le "having" APRES le "group by",
    et là ça fonctionne parfaitement :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    SELECT 
    	cl.name AS 'categorie',
    	pl.name AS 'produit',
    	ROUND(p.price*1.055, 2) AS 'prix_ttc',
     
    	MAX(CASE WHEN fl.name = 'Auteur :' THEN fvl.value END) AS 'auteur',
    	MAX(CASE WHEN fl.name = 'Editeur :' THEN fvl.value END) AS 'editeur',
     
    	MAX(CASE WHEN fl.name = 'Largeur en cm :' THEN fvl.value END) AS 'largeur_cm',
    	MAX(CASE WHEN fl.name = 'Hauteur en cm :' THEN fvl.value END) AS  'hauteur_cm',
     
    	MAX(CASE WHEN fl.name = 'ISBN :' THEN fvl.value END) AS 'ISBN',
     
    	MAX(CASE WHEN fl.name = 'Nombre de pages :' THEN fvl.value END) AS 'pages',
     
    	MAX(CASE WHEN fl.name = 'Reliure :' THEN fvl.value END) AS 'reliure',
    	MAX(CASE WHEN fl.name = 'Type de couverture :' THEN fvl.value END) AS 'couverture',
     
    	MAX(CASE WHEN fl.name = 'Au catalogue :' THEN fvl.value END) AS 'au_catalogue',
     
    	CONCAT(fp.id_product,'.jpg') AS 'nom_image'
     
    FROM feature_product fp 
     
    LEFT JOIN feature_lang fl ON (fl.id_feature = fp.id_feature)
    LEFT JOIN feature_value_lang fvl ON (fvl.id_feature_value = fp.id_feature_value AND fl.id_lang = 4)
    LEFT JOIN product_lang pl ON (fp.id_product = pl.id_product)
     
    LEFT JOIN product p ON (pl.id_product = p.id_product)
    LEFT JOIN category_lang cl ON (p.id_category_default = cl.id_category AND cl.id_lang = 4)  
     
    WHERE
    fvl.id_lang = 4
    AND p.active = 1
    AND p.id_tax_rules_group = 3
     
    GROUP BY fp.id_product, pl.name
    HAVING au_catalogue = 'oui'
    ORDER BY cl.name ASC, pl.name ASC
    Merci une nouvelle fois

  12. #12
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut Bioto.

    Désolé de cette erreur.
    Ça fait des années que je pratique le sql, et bien, je n'arrive toujours à me mettre dans la tête le bon ordre des différentes clauses dans un select.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [1.x] Créer un fichier csv avec PHP-excel-reader
    Par blasil64 dans le forum Symfony
    Réponses: 2
    Dernier message: 21/05/2010, 09h46
  2. crer un fichier csv avec php
    Par Jerem38 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 17/06/2009, 16h41
  3. Importer un fichier .csv avec php et PDO
    Par Touny dans le forum Langage
    Réponses: 6
    Dernier message: 05/03/2009, 17h45
  4. [CSV] Traitement fichiers txt/csv avec php
    Par cirtey dans le forum Langage
    Réponses: 4
    Dernier message: 26/01/2007, 16h46
  5. [CSV] Export CSV avec PHP (saut de ligne)
    Par Indy80 dans le forum Langage
    Réponses: 2
    Dernier message: 10/08/2006, 16h08

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