Vous n'êtes pas identifié(e).
Pages :: 1
Bonjour,
Je dois créer un tableau dynamique via des informations de ma bdd, mais je ne sais pas trop comment m'y prendre pour faire sa proprement.
Je vous montre ça, ca vous permettra de bien comprendre.
le tableau finalement que je souhaiterai :
Ma base de donnée qui est de la forme :
Comment faire pour avoir un tableau comme ci-dessus, avec un code propre (pas 50 requetes sql j'entend). (Pour info, un user peut être dans plusieurs équipes)
Voici le "début" de code qui ne sert pas a grand chose ... :
}
?>
<table style="text-align:center">
<tr>
<td style="width:100px" class="cellule_red"><b>Groupe d'affectation</b></td>
<td style="width:100px" class="cellule_red"><b>Technicien</b></td>
<td style="width:100px" class="cellule_red"><b>Urgente</b></td>
<td style="width:100px" class="cellule_red"><b>Express</b></td>
<td style="width:100px" class="cellule_red"><b>Courte</b></td>
<td style="width:100px" class="cellule_red"><b>Moyenne</b></td>
<td style="width:100px" class="cellule_red"><b>Longue</b></td>
<td style="width:100px" class="cellule_red"><b>Total</b></td>
</tr>
</table>
Je ne sais pas trop si je dois traiter toutes les infos dans mon while avant mon tableau ou dans la tableau (je pense que ca doit etre fait dans la tableau sinon ca ne sera pas propre)
un gros coup de main svp?
merci
Dernière modification par ebouilleur (30-07-2012 14:33:24)
Hors ligne
Bonjour,
Un revenant!
Alors oui, c'est plus propre de peupler ton tableau avec une seule boucle à partir de ton resultset. Il te faut donc une seule requête.
Une question ta table stats n'a pas de clé primaire? donc pas d'id de log?
Je suis un peu pris jusqu'à la fin du mois, j'essaye de te faire cela au plus tôt. Mais on est quand même dans un cas où les vues indexées ont leur légitimité et dans un cas où mysql devrait montrer ses limites. Interessant en tout cas à tester pour voir en myisam les performances de retour. Tu as combien de lignes sur ta table?
++
Dernière modification par Jc (31-07-2012 00:00:32)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Saluton,
Penser éventuellement à l'option WITH ROLLUP du GROUP BY qui fera presque tout le travail.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Salut,
Oui je reviens de vacances ^^ (et j'ai pas mal de boulot, j'ai meme pas le temps de travailler pour moi )
non je n'ai pas mis de clé id, mais je peux en rajouter s'il le faut.
En fait le contenu de cette table est est "résumé" d'une autre bcp plus grosse dont j'en extrait ce qui m'intéresse. La table est minuscule pour le moment, mais va gagner environ 50 enregistrements par jour.
je ne connais pas WITH ROLLUP, mais je vais y jetter un oeil
Merci
Hors ligne
OK, donc si j'ai bien compris, le ROLLUP me permet de faire les calcules des lignes Total de mon tableau, en faisant une requete du genre :
a priori ça fonctionne bien
J'essaye deja dans un 1er temsp d'afficher les lignes pour une meme equipe, sans total ni rien, et je bloque, je n'obtient pas ce que je voudrais... est ce que je dois bien faire qqchose du genre :
Dernière modification par ebouilleur (31-07-2012 16:03:29)
Hors ligne
Bonjour,
En fait, tu n'es pas sur la bonne voie. Pour construire la bonne requête du premier coup, il faut d'abord que tu tiennes compte de sa signature (conforme au tableau) puis de l'effet du rollup. En gros il te faut faire un group by equipe (tu n'as pas le choix pour celle-ci) et puis sur chaque colonne pour laquelle tu souhaites qu'un total soit calculé automatiquement.
Ensuite tu ne peux pas te permettre d'avoir un retour de type NULL sur une ligne pour une colonne aggrégée car sinon ton cela va flinguer tes SUM(). Donc évite un LEFT JOIN comme tu l'as fait.
Il te faut donc pour éviter les valeurs NULL dans tes calculs d'aggrégation, que dans chacune de tes requêtes dérivées il y ait un pré calcul qui te retourne la valeur 0 en l'absence d'information pour chaque colonne de manière à ne pas avoir d'effet NULL sur tes jointures.
L'idée est là:
GROUP BY t0.equipe, t0.nom_tech, urgent, express , courte, moyenne, longue, total WITH ROLLUP
Donc le problème niveau perf, ce sont les jointures sur des VARCHAR, pour lesquelles tu es un peu beaucoup victime de la dénormalisation de ta table. En gros pour les perfs, cette requête devrait être une vue dénormalisée de tes tables. Car construire une requête sur un modèle dénormalisé c'est tout sauf performant sur un moteur transactionnel. Pour cela que le fait d'être sur MyISAM, me rends curieux sur les perfs...
Attention car il va falloir très certainement que tu modifies encore cette requête par rapport justement aux valeurs NULL.
Note: j'ai rajouté nom_tech dans l'aggregation pour être conforme à la norme SQL.
Dernière modification par Jc (01-08-2012 14:00:21)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Salut,
Tu as modifié quoi a 14h? juste le LEFT JOIN qui est devenu INNER JOIN ou autre chose?
Sinon je suis dessus depuis 14h, il y avait des truc a corrigé car ta requete (tel quelle) me sortait 500 lignes (alors que j'ai en gros 50 enregistrements ^^
Bon le mieux que j'ai pour le moment c'est avec ca :
J'ai je crois juste supprimé le "nb_intervention" du GROUP BY de la reque t6
MAIS je n'ai le résultat que pour 1 seul tech sur 1 seul site...
Alors que chaque requête lancé indépendamment me donne bien pour tous les tech et tous les sites, en image :
Dernière modification par ebouilleur (01-08-2012 15:25:29)
Hors ligne
Bonjour,
Merci pour ton retour, je pense avoir saisi mon erreur (difficile de faire cela à la volée de tête sans jeu de test).
Après réflexion je pense que pour sortir le tableau en l'état on est un peu victime de ton choix de format de table.
est bien mais oblige à retravailler la sortie pour ton tableau, car on aura les priorités en ligne et non en colonne.
A méditer.
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Hors ligne
Je crois que je vais essayer de changer ma table pour que le traitement soit plus simple...
Hors ligne
Bonjour,
En fait ma requête initiale est bonne, la seule chose c'est qu'elle nécessite beaucoup plus de filtrage que ce que j'ai fait. Mais tu as raison, sur un moteur OLTP travailler sur des structures normalisées pour sortir des stats est toujours la meilleure option.
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Pages :: 1