|
Publicité | ||||||||||||||||||||||
|
|
#1 |
|
Membre confirmé
![]() ![]() Inscription : novembre 2007 Messages : 134 ![]() |
Bonjour,
Je cherche à savoir si je vais pouvoir aisément changer l'orientation d'une colonne d'un tableau pour le passer à plusieurs dimensions. Imaginez à l'origine un tableau avec les éléments suivants en colonne : "Type de produit", "Produit", "Année", "Semaine", "Chiffre d'affaires". Les années et les semaines apparaissent en ligne et je veux au contraire les faire apparaitre en colonne pour avoir au final un tableau avec la catégorie, le produit puis une colonne pour chaque couple année/semaine, sachant que je ne connais pas à l'avance le nombre de couple année/semaine. L'intersection indique le chiffre d'affaires. Je ne sais pas si c'est possible, j'imagine que oui, dans ce cas vers quoi dois je me diriger pour trouver la solution, javascript, php (et/ou le framework, ici cakephp), sql, si quelqu'un sait m'orienter cela me fera gagner du temps. Merci |
|
|
00
|
|
|
#2 | ||
|
Membre actif
![]() Inscription : mai 2009 Messages : 167 ![]() |
Salut,
Pour faire ton tableau, le plus simple sera du html. Pour le contenu, ça dépend comment tu comptes récupérer t'es données : tu les rentres à la main, tu effectues une requête sur une bdd, tu incrémentes un tableau en php, ... Selon la solution, la méthode sera différente (enfin entre html et php). je te déconseille le javascript pour gérer le contenu. Pour ton tableau, je pense que tu veux obtenir quelque chose comme ça : Code html :
|
||
|
|
00
|
|
|
#3 | ||||
|
Membre confirmé
![]() ![]() Inscription : novembre 2007 Messages : 134 ![]() |
Bonjour,
Je me suis mal expliqué désolé. En effet les données proviennent d'une requête, plus précisément via php (avec le framework cakephp) et celles-ci à l'origine ont un format classique qui correspondrait au tableau suivant : Code :
Code :
Je me demande cependant s'il n'y a pas un moyen via javascript mais n'y connaissant rien ce ne sont que des hypothèses. Si quelqu'un à des idées, merci. |
||||
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Inscription : mai 2009 Messages : 167 ![]() |
En effet c'est un peu plus compliqué que ce que je pensais.
Quand tu effectues ta requête, qu'est ce que tu récupères ? (année, semaine, produit, type de produit, etc) J'avais effectué un traitement qui créer un tableau automatiquement, un peu ce que tu veux faire (bon le mien était dans l'autre sens, mais ça revient au même). Pour ma part, je l'ai fait en php. Je peux essayer de te donner un coup de main mais ça risque d'être un peu long quand même. Doki. |
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() ![]() Inscription : novembre 2007 Messages : 134 ![]() |
Bonjour,
La requête récupère effectivement les données en ligne, cad : "SELECT [type de produit ], [produit] , [année], [semaine], [Chiffre d'affaires] FROM ..." En fait pour le moment je ne suis pas encore face aux problèmes mais j'anticipe et je me pose les questions à venir. Pour le moment je ne vois que deux solutions : - soit créer dynamiquement la requête en php (en espérant que je puisse le faire dans cakephp) - soit créer cela sous mysql avec du sql dynamique (c'est surtout là que je creuse car je n'y connais rien en développement web, enfin pour le moment) Merci pour ton aide. |
|
|
00
|
|
|
#6 |
|
Membre actif
![]() Inscription : mai 2009 Messages : 167 ![]() |
Avec cake, c'est tout a fait possible. Je l'ai déjà utiliser pour ce genre de requête.
Pour l'affichage, effectivement tu peux utiliser du sql dynamique, mais là je ne pourrais pas être d'une grande aide. Je ne connais pas du tout. Si tu veux le faire en php (ce que j'avais fait), il faudra imbriquer plusieurs boucle pour générer automatiquement ton tableau. |
|
|
00
|
|
|
#7 | |
|
Membre du Club
![]() Inscription : février 2005 Messages : 58 ![]() |
Citation:
Je ne suis pas sûr d'avoir entièrement compris ce que tu veux faire mais je pense que le plus simple est de manipuler le tableau retourné par la méthode find() de ton modèle, afin qu'il ait la forme désirée. Tu peux faire ceci soit dans le modèle, le contrôleur voir même la vue ... mais là celà dépend du meilleur endroit (conceptuellement) où cette transformation doit avoir lieu, en fonction de la signification qu'elle a : si ce n'est que de l'affichage alors il faut le faire dans la vue (avec un Helper par exemple), autrement une méthode "getCustomFormat" du modèle serait plus appropriée. Pour effectuer la manipulation du tableau de résultat je t'invite à regarder du côté de la librairie Set du framework. Elle propose de nombreuses méthodes permettant de changer l'arborescence de tableaux de manière intuitive, voir l'exemple de Set::combine(). Ceci n'est qu'un avis, mais je le répète je ne suis pas sûr d'avoir saisi ce que tu souhaites faire ... Pierre |
|
|
|
00
|
|
|
#8 | ||||||
|
Membre confirmé
![]() ![]() Inscription : novembre 2007 Messages : 134 ![]() |
Bonjour
Merci pour ton aide, je vais regarder cela en détail dès que j'ai un moment. Depuis j'ai creusé un peu et j'ai trouvé le début pour le faire sous php en créant dynamiquement la requête, je me suis aidé du tuto ici : http://moko.developpez.com/articles/...ise-php-mysql/ Un exemple vaut mieux qu'un long discours : D'abord la base de données : Code :
Mon problème est que tout cela est en ligne, je veux pivoter les semaines en colonne et indiquer le CA au croisement. En sql cela donnerait ceci : Code :
En sql dynamique je cherche encore mais avec php j'ai trouvé la solution suivante : Code :
Merci encore pour ton aide je vais jeter un œil à tes recommandations. |
||||||
|
|
00
|
|
|
#9 | ||||
|
Membre du Club
![]() Inscription : février 2005 Messages : 58 ![]() |
Bonjour,
En fait je pensais a quelque chose comme ca (full PHP une fois que tu as recupere tes donnees) : Code :
Code :
|
||||
|
|
00
|
|
|
#10 |
|
Membre confirmé
![]() ![]() Inscription : novembre 2007 Messages : 134 ![]() |
Bonjour,
Merci pour tes infos, malheureusement je ne suis pas trop et n'ai donc pas pu tester, enfin pas pour le moment. En fait dans mon contrôleur j'ai une gestion par objet (POO) et là tu me donnes un script procédural, du coup je suis un peu perdu. Merci quand même pour ton aide, cela me servira juste un peu plus tard quand tout cela sera plus clair pour moi. |
|
|
00
|
|
|
#11 | |||||||
|
Membre du Club
![]() Inscription : février 2005 Messages : 58 ![]() |
Citation:
J'ai eu un peu de temps durant le week-end j'ai essayé d'en faire une implémentation concrète (ce message est un doublon de celui posté dans la discussion ouverte sur forum.cakephp-fr.org). Ce problème est très intéressant et je n'ai pas la prétention d'y apporter une réponse absolue, mais je pense que ce qui est détaillé après permet de résoudre ton problème. Le code est entièrement disponible sur mon compte github, dans une branche à part : http://github.com/real34/CakeTest/tree/groupby Il suffit de le télécharger et de configurer la base de données, puis de créer la table en utilisant cake schema run create ... de cette manière tu pourras analyser et faire des tests, voir même l'améliorer. Voici donc ce que j'ai fait ! Dans le modèle, il te faut ajouter une méthode permettant de récupérer les informations que tu souhaites en faisant la somme du CA total par Produit et Année/Semaine : Code :
Code :
Code :
Si jamais j'avais mal compris ce que tu souhaitais ou qu'il y avait des problèmes ou des meilleures façons de faire ça, n'hésites pas à me le faire savoir. Bonne journée, Pierre Dernière modification par Macmillenium ; 24/08/2009 à 14h21. Motif: Ne pas confondre [QUOTE] et [CODE] |
|||||||
|
|
00
|
|
|
#12 |
|
Membre confirmé
![]() ![]() Inscription : novembre 2007 Messages : 134 ![]() |
Bonjour,
Merci pour ton dévouement, désolé je n'ai pas pu regarder cela avant aujourd'hui. J'ai mis de coté mon apprentissage car cela ne collait pas avec le planning que je m'étais fixé pour mon projet, visiblement apprendre tout d'un coup est un peu plus long que je l'imaginais, en tout cas pour faire des choses un peu plus compliqué. Il faut dire aussi qu'à part la bdd je ne connais rien au reste, ni html, ni css, ni javascript, ni php, ni cake ... J'ai testé mais j'ai un problème au niveau de la vue, il m'indique une "Parse error" au niveau de "<?php endforeach;>" et juste avant à "<?php foreach($semaines as $semaine)>" je me suis dit que cela venait de la balise fermante et j'ai donc ajouté un "?" comme ceci "?>" au lieu de ">" mais si cela résout le premier cas, cela bloque toujours au niveau de "endforeach". Malheureusement mes connaissances sont trop limitées pour comprendre, surtout que cela fait plus d'une semaine que j'ai arrêté de potasser les bouquins php. Je ne veux pas t'embêter plus longtemps, j'ai compris le principe et je sais maintenant que la résolution du problème se trouve du coté de la classe Set donc dès que je reprends cela je vais m'y attarder pour y résoudre ma problématique. Merci encore pour ton aide. |
|
|
00
|
|
|
#13 | |
|
Membre du Club
![]() Inscription : février 2005 Messages : 58 ![]() |
Citation:
Je te conseille vraiment de récupérer le code sur mon compte Github, au moins tu n'auras pas de mauvaise surprise et pourras l'étudier directement ! http://github.com/real34/CakeTest/tree/groupby |
|
|
|
00
|
|
|
#14 |
|
Membre confirmé
![]() ![]() Inscription : novembre 2007 Messages : 134 ![]() |
Bonjour,
J'ai corrigé la vue, cela fonctionne maintenant. Merci beaucoup pour ton aide, c'est à mon avis la meilleure solution car au final il s'agit uniquement d'un problème de mise en forme et cela me semble mieux de traiter cela de cette façon, plutôt que du coté sql. Merci |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com