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..)
Voici la requête:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 GLN | NOM | CAPharma | CACulturel | CaPhoto 100 Mag1 150 140 100
$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
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.
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++; }
Le soucis c'est qu'en faisant ainsi je me retrouve avec une ligne par site_id avec a ce format:
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
3
4 GLN | NOM | CAPharma | CACulturel | CaPhoto 100 Mag1 150 100 Mag1 140 100 Mag1 100
J'aimerai pouvoir merger les lignes dans le script si le GLN est identique pour obtenir une ligne unique comme ci-dessus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 GLN | NOM | CAPharma | CACulturel | CaPhoto 100 Mag1 150 140 100
Merci d'avance pour votre aide
Partager