problème de calcul sur 2 tables différentes

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : problème de calcul sur 2 tables différentes

Re: problème de calcul sur 2 tables différentes

par Ryle » 14 sept. 2016, 14:44

Ah tu veux pinailler ?! :-s

Et ben alors non, TH ce n'est pas nécessairement dans un THEAD :)

Les THEAD c'est fait pour définir des entêtes de tableaux, pouvant contenir une ou plusieurs lignes de façon à les dissocier du corps du tableau (TBODY) et du footer (TFOOT). L'intérêt est de pouvoir faire défiler les données du corps du tableau sans que l'entête ou le pied de tableau ne bouge, ou dans le cas d'une impression, de pouvoir répéter ceux-ci sur chaque page.

Le TH sert quant à lui à différencier une cellule "d'entête" d'une cellule classique. Celle-ci peut être en début de colonne (dans le thead), en fin de colonne (dans le tfoot), mais aussi en début, fin ou milieu de ligne (dans le tbody)...

Ryle - Roi du pinaillage :langue:

Ps : bon par contre ici, effectivement, ça peut être pas mal de mettre un thead autour des th à condition de les sortir de la boucle pour ne pas les répéter systématiquement... :-*

Re: problème de calcul sur 2 tables différentes

par moogli » 13 sept. 2016, 14:47

salut,

juste au passage une pinaille sémantique, th c'est dans un thead :)
Tu peux simuler cela avec une ligne pour chaque 'nouveau centre' avec nue seule case et un colspanqui vaut le nombre de colonne de ta table.
<tr><td colspan="4" style="css_centre_dans_table">Centre <?php echo $sql['centreID']; ?></td></tr>
cette ligne doit être affichée lorsque que tu changes de centre (la façon de faire est indiquée pour Ryle).


@+

Re: problème de calcul sur 2 tables différentes

par Ryle » 13 sept. 2016, 11:18

Bonjour,

Si je comprend bien et par rapport à ce que tu affiches actuellement, il suffirait de ne pas afficher la ligne de "titres" tant que tu affiches les résultats d'un même centre. Pour cela, il te faut comment par trier ta requête SQL par centre (avec un ORDER BY r.centreID à la fin de celle-ci).

Ensuite, lorsque tu affiches les résultats, à la fin de ta boucle tu stockes dans une variable temporaire l'id du centre que dont tu parcours l'enregistrement ($sql['centreID']). Au moment d'afficher la ligne de titre (les <TH>), tu ajoutes une condition pour comparer l'id du centre affiché avec celui que tu as dans ta variable temporaire : s'ils sont différents tu affiches l'entête, s'ils sont identiques tu ne l'affiche pas.

Il te suffira alors d'adapter cet "entête" pour par exemple y faire figurer le nom ou le code du centre, et dans les lignes de "détail" n'afficher que les typologies :)

Re: problème de calcul sur 2 tables différentes

par Gibbs » 13 sept. 2016, 09:40

Bonjour,
je suis dessus depuis plusieurs jours mais je n'y arrive pas. Un peu d'aide ne serait pas de refus.
Par avance merci.

Re: problème de calcul sur 2 tables différentes

par Gibbs » 04 sept. 2016, 19:05

Bonjour Ryle et Moogli,
On avance un peu , j'ai modifié quelques lignes pour l'affichage. A priori, j'obtiens le résultat escompté mais je risque d'avoir une page interminable au regard des futurs enregistrements.
Image

L'affichage idéal (par centres) serait un tableau (exemple: ci dessous) :

Centre| 224
Typologie| 1 |le résultat qui convient |le total additionné des enregistrements ayant la typologie 1
Typologie| 2 |le résultat qui convient |le total additionné des enregistrements ayant la typologie 2
Typologie| 3 |le résultat qui convient |le total additionné des enregistrements ayant la typologie 3
Etc... |
Vous trouverez ci joint le script .
Image
Un exemple dans ma table.

Image
Et enfin la table qui sert pour le calcul

Image

Merci pour votre aide.
A bientôt

Re: problème de calcul sur 2 tables différentes

par Gibbs » 31 août 2016, 19:28

Bonsoir et merci à vous deux,
Je vais mettre en application vos conseils et travailler sur mon projet ce week-end . Je reviendrais vers vous pour vous
informer sur l'avancement de mon travail.
Bonne soirée.

Re: problème de calcul sur 2 tables différentes

par Ryle » 31 août 2016, 14:28

Aucun soucis, c'est un forum pour débutants et on est là pour t'aider :)

Si je reformule ce que tu veux, c'est pour chaque centre, afficher le résultat (conso par mois) qui est associé à chacune des typologies ? Et compléter les "trous" de ton tableau ?

Plusieurs choses à voir / savoir :
- Les requêtes SQL ne permettent pas de retourner des tableaux croisés dynamiques comme ici (dans la mesure ou la liste des centres et la liste des typologies ne sont pas fixes et dépendent du contenu présent en base), il faudra donc récupérer les le résultat de ta ou tes requêtes et les traiter avec php
- Pour une typologie donnée, le résultat "conso*mois" sera toujours le même quel que soit le centre. En l'état il n'y a pas d'intérêt, à moins que tu ne veuilles faire la somme des conso par typologie pour un même centre ? Dans ce cas, tu peux utiliser la fonction SUM() et une clause GROUP BY
- Est-ce que tous les centres sont nécessairement associés à toutes les typologies ? Si oui, la jointure est simple, sinon, il faudra une jointure externe et une gestion des résultats manquants.

Dans l'idéal, peux-tu nous donner un exemple de ce que tu as en base (avec 2 centres et 3 typo) et du résultat que tu attends ? on pourra ainsi mieux voir ce que tu souhaites faire et te guider :)


Pour le champ date, ça fonctionne sous MySQL car tu peux protéger les noms des champs avec `. MySQL considère alors `date` comme le nom d'un champ et pas comme un mot clé SQL. En soit, aucun problème, ça fonctionne tant que tu utilises MySQL. Si un jour tu venais à travailler sur une autre base, cela ne fonctionnerait pas et prend en général un temps fou à comprendre d'où vient le problème :)
Du coup je recommande de prendre de bonnes habitudes dès le début, même avec MySQL et effectivement date_entree (mieux vaut éviter les accents) est explicite et ne génère pas de conflit ;)

Re: problème de calcul sur 2 tables différentes

par moogli » 31 août 2016, 12:53

salut,

pour le champ c'est effectivement mieux de le nommer autrement que "date" cela peu poser soucis dans les requêtes sql (il y a toujours un moment où mysql ne va savoir si c'est la colonne qui est souhaitée ou un truc de type date).

Pour le reste, sachant que le nombre de typologie ne semble pas connue (a moins que la table soit figée ?) il faut afficher une tableau avec les colonnes de la requêtes

centre | observation | typologie | etc
tu auras une ligne par résultat de la requête.
pour le total il faut le calculer après pour l'afficher autrement.

dans le cas d'un nombre de typologie fixe et un affichage horizontal comme dans l'exemple il faut procéder autrement
- sélection des typologies (et sauvegarde dans un tableau)
- afficher l'entête en bouclant sur le tableau des typologie pour le nombre de colonne.
- sélection des données à afficher (utilisation direct ou sauvegarde dans un tableau cela fait pareil
- pour chaque ligne de donnée il faut
- afficher les données communes (ici le centre)
- boucler sur le tableau des typologies pour aller chercher la bonne info dans le tableau des données (pour peux que les colonnes aient le même nom que les noms dans l'autre sinon c'est une requêtes SQL pour chaque).
- calculer le total qui sera afficher à la fin (un tableau qui contient un index par typologie)
- afficher le total.

@+

Re: problème de calcul sur 2 tables différentes

par Gibbs » 30 août 2016, 21:39

Bonjour Ryle,
Merci pour ton aide, j'ai réglé une partie en suivant tes conseils mais je souhaite par rapport à la typologieID afficher le résultat qui convient pour chaque typologie enregistrée. merci encore
Ci joint ma requête.
Image

Ci joint l'affichage sur ma page

Image
Par contre pour le champ date je ne comprends pas vraiment faut-il que je renome par exemple "date_entrée".
Merci Ryle et désolé de t'ennuyer je débute c'est un peu la galère pour moi.
Bonne soirée.

Re: problème de calcul sur 2 tables différentes

par Ryle » 29 août 2016, 11:57

Bonjour,

Pas certain de bien comprendre ce que tu veux faire, mais en attendant plus de précisions, je tente ma chance.

Il faudrait une jointure entre tes tables recensement et typologie, celle-ci pouvant se faire sur la colonne typologieID et un produit de deux colonnes de la table typologie pour chaque ligne affichée ?
SELECT r.id_recens, ... , r.agentID, t.id_typo, t.typologie, (t.conso * t.mois) as resultat
  FROM recensement r
  JOIN typologie t ON t.id = r.typologie ID
SI ce n'est pas ce que tu souhaites faire, donne nous un exemple de tes données et du résultat attendu :)

Ps : à noter, tu as un champ date nommé "date" dans ta table recensement. "date" est un mot clé SQL réservé, et il n'est pas judicieux de l'utiliser comme nom de colonne, même si MySQL permet ce genre d'abus en utilisant les ` pour le nommer ;)

problème de calcul sur 2 tables différentes

par Gibbs » 28 août 2016, 23:18

Bonsoir,
j'ai 2 tables la première recensement et la seconde typologie, je souhaiterais faire une multiplication
(conso * mois) en fonction des valeurs enregistrées dans la table typologie pour chaque valeurs enregistrées
dans la colonne "typologieID" de la table "recensement" et afficher le résultat dans un tableau mais je n'y arrive pas.
Déjà plusieurs jours dessus mais en vain.

ci joint la copie de la table "recensement"
Image
ci joint la copie de la table "typologie"
Image
En fait , j'ai essayé la fonction d'agrégation SUM() qui permet de calculer la somme totale d'une colonne contenant des valeurs numériques
mais ça marche pas.
Je souhaite de l'aide afin de m'éclairer car je débute pas facile le php :priere: . J'espère avoir été clair.
Merci d'avance pour vos réponses.