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

EDI, CMS, Outils, Scripts et API PHP Discussion :

Traitement SQL et création d'un CSV


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2017
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Traitement SQL et création d'un CSV
    Bonjour à tous,

    J'ai une requête SQL avec laquelle je dois construire un CSV.

    Je dois avoir comme résultat final une ligne par code GLN (Magasin) et dans chaque colonne le Chiffre d'affaire (CA) des différents secteurs (site_id) de vente du magasin ( Pharmacie, Culturel, Photo etc..)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GLN | NOM | CAPharma | CACulturel | CaPhoto
    100    Mag1   150140100
    Voici la requête:

    $requete="SELECT p.id as gln, p.nom as nomdusite , p.pannonceau as pannonceau, p.raisonSociale as nommagasin, p.centrale as sca, t2.site_id, t2.CA_TOTAL FROM pointretraits p LEFT JOIN (SELECT t1.pointretrait_id, t1.site_id, SUM(t1.totalttc) as CA_TOTAL FROM (SELECT * FROM coliss GROUP BY nrcommande, site_id) t1 GROUP BY t1.pointretrait_id, t1.site_id ORDER BY site_id) t2 ON p.id=t2.pointretrait_id WHERE id=3025680015000 ORDER BY id, site_id ";

    Je dois retraiter cette requête car je GROUP BY sur le site_id pour obtenir les montants mais j'obtiens donc plusieurs lignes, une par site_id

    Pour l'exemple, dans la requête je teste avec un seul GLN (Magasin) => WHERE id=3025680015000


    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
     
    $getLignesColis = @mysql_query($requete);
        $int = 2;
    while ($ligne = @mysql_fetch_array($getLignesColis)) {
     
     
            $sheet->setCellValue("A" . $int, $ligne['gln']); 
            $sheet->setCellValue("B" . $int, $ligne['nomdusite']);
            $sheet->setCellValue("C" . $int, $ligne['pannonceau']);
            $sheet->setCellValue("D" . $int, $ligne['nommagasin']);
            $sheet->setCellValue("E" . $int, $ligne['sca']);
     
                    switch ($ligne['site_id']) {
                        case '1':
                            $sheet->setCellValue("G" . $int, $ligne['CA_TOTAL']);
                            break;
                        case '2':
                            $sheet->setCellValue("J" . $int, $ligne['CA_TOTAL']);
                            break;
                        case '3':
                            $sheet->setCellValue("F" . $int, $ligne['CA_TOTAL']);
                            break;
                        case '4':
                            $sheet->setCellValue("H" . $int, $ligne['CA_TOTAL']);
                            break;
                        case '931786493':
                            $sheet->setCellValue("L" . $int, $ligne['CA_TOTAL']);
                            break;
                        case '995863':
                            $sheet->setCellValue("K" . $int, $ligne['CA_TOTAL']);
                            break;
     
                        case '18261839':
                            $sheet->setCellValue("M" . $int, $ligne['CA_TOTAL']);
                            break;
                        case '4579832':
                            $sheet->setCellValue("I" . $int, $ligne['CA_TOTAL']);
                            break;
     
                    }
     
            $int++;
        }
    Dans ma boucle je viens checker la variable site_id qui correspond au secteur de vente (Pharmacie, Culturel) et je place le montant du CA dans la colonne correspondante.

    Le soucis c'est qu'en faisant ainsi je me retrouve avec une ligne par site_id avec a ce format:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    GLN | NOM | CAPharma | CACulturel | CaPhoto
    100    Mag1   150100    Mag1               140100    Mag1                                 100
    Ce que j'aimerai obtenir c'est une seule ligne sur ce format:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GLN | NOM | CAPharma | CACulturel | CaPhoto
    100    Mag1   150140100
    J'aimerai pouvoir merger les lignes dans le script si le GLN est identique pour obtenir une ligne unique comme ci-dessus.

    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il suffit de n'augmenter la ligne que quand le gln change :
    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
    $getLignesColis = @mysql_query($requete);
    $int = 1;
    $current_gln = '';
    while ($ligne = @mysql_fetch_array($getLignesColis)) {
     
            if ($current_gln != $ligne['gln']) {
                  $int++;
                  $current_gln = $ligne['gln'];
            }
            $sheet->setCellValue("A" . $int, $ligne['gln']); 
            $sheet->setCellValue("B" . $int, $ligne['nomdusite']);
            $sheet->setCellValue("C" . $int, $ligne['pannonceau']);
            $sheet->setCellValue("D" . $int, $ligne['nommagasin']);
            $sheet->setCellValue("E" . $int, $ligne['sca']);
     
                    switch ($ligne['site_id']) {
                        case '1':
                            $sheet->setCellValue("G" . $int, $ligne['CA_TOTAL']);
                            break;
                        case '2':
                            $sheet->setCellValue("J" . $int, $ligne['CA_TOTAL']);
                            break;
                        case '3':
                            $sheet->setCellValue("F" . $int, $ligne['CA_TOTAL']);
                            break;
                        case '4':
                            $sheet->setCellValue("H" . $int, $ligne['CA_TOTAL']);
                            break;
                        case '931786493':
                            $sheet->setCellValue("L" . $int, $ligne['CA_TOTAL']);
                            break;
                        case '995863':
                            $sheet->setCellValue("K" . $int, $ligne['CA_TOTAL']);
                            break;
     
                        case '18261839':
                            $sheet->setCellValue("M" . $int, $ligne['CA_TOTAL']);
                            break;
                        case '4579832':
                            $sheet->setCellValue("I" . $int, $ligne['CA_TOTAL']);
                            break;
     
                    }
        }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2017
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Merci à toi, pas encore testé mais ça semble évident maintenant que tu le dis..

Discussions similaires

  1. [eZ Publish] Création d'un formulaire avec traitement SQL
    Par tamiii dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 25/04/2008, 20h52
  2. Réponses: 7
    Dernier message: 12/05/2006, 17h21
  3. [vb.net] [sql server] Création de BDD ...
    Par basnifo dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/05/2006, 12h14
  4. Requete sql pour création de table dans une base access
    Par Ben156 dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/01/2006, 22h12
  5. [SQL SERVER]Création table de Login avec création mot pass
    Par MatthieuQ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/01/2006, 12h07

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