Boucles imbriquées (while)

nougitch Messages postés 431 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 17 novembre 2008 - 24 avril 2006 à 16:13
nougitch Messages postés 431 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 17 novembre 2008 - 25 avril 2006 à 10:34
Bonjour,

Voici un extrait de ma base de données :


level<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />

,
bl

,
ia

,
jan

,

,
----

3

,
1

,
0

,


,
----

4

,
1

,
39

,


,
----

4

,
1

,
40

,


,
----

3

,
2

,
0

,


,
----

4

,
2

,
38

,


,
----

3

,
3

,
0

,


,
----

3

,
1

,
0

,


,
----

4

,
1

,
41

,


,
----

3

,
2

,
0

,


,
----

3

,
3

,
0

,


,
----

3

,
1

,
0

,


,
----

4

,
1

,
42

,


,
----

4

,
1

,
43

,


,
----

3

,
2

,
0

,


,
----

3

,
3

,
0

,


Je souhaite mettre en place un calcul automatique qui est le suivant.
Le total d'un niveau 3 est égal à tous les niveaux 4 qui lui appartient.

J'ai du mal avec mes boucles pour conserver le total et l'insérer dans la base au bon endroit.

Quelque peut-il m'aider ?

Merci beaucoup.

7 réponses

Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
24 avril 2006 à 16:42
Bonjour,

Le SQL n'est pas ma langue maternelle mais je dois pouvoir t'aider un peu ...

Je comprend pas bien tes champs donc je vais pas trop me tremper dedans ...

alors:

Quand tu fais ton while qui recupere tous les scores des 4 correspond a un 3

while(mysql_fetch...

tu recuperes chaque valeur et tu les ajoutes

fin while



ensuite tu update le 3 qui doit recuperer ta somme faite dans ton while



Pour faire cela en boucle tu as juste a utiliser soit un for soit une
requete SQL qui recupere le plus grand et tu decrementes ton compteur a
chaque passage...



J'espere que cela t aidera ...

-------------------------------------------------------------------------------------------------------

Il vaut mieux poser une question et passer pour bête que le rester
toute sa vie
0
nougitch Messages postés 431 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 17 novembre 2008
24 avril 2006 à 17:06
Salut Teclis,


Merci de bien vouloir m'aider.
C'est vrai que mon premier post n'est pas très parlant.
Je vais prendre un exemple plus simple.
Ca à l'air long mais c'est très simple à comprendre.

Imaginons une hiérarchie, ou plutôt des niveaux, dans le monde de la vente.

Le niveau 1 serait le lieu : paris ; lille ; bordeaux ; lyon etc…
Le niveau 2 serait le support : cd ; dvd ; vhs etc...
Le niveau 3 serait le type de musique : rock ; pop ; rap ; r&b ; house etc...
Le niveau 4 serait l'artiste : les musclés ; chantal goya ; henri dès etc… (ils n’entrent pas dans l’une des catégories ci-dessus mais imaginons ;-)


Le niveau 5 serait l’album : best of des musclés ; les musclés font la fête ; chantal et bécassine ; bécassine et chantal ; henri dès au pays des dés etc…





L’idée est donc d’avoir un tableau annuel des ventes comme suit, avec des input type=text qui seraientt disabled partout, sauf pour l’album (qui est la plus petite entité, soit le niveau 5).







,
jan,
fév,
mar,
avr,
mai,
juin,
jui,
aou,
sep,
oct,
nov,
Dec,
----

Paris,


,


,


,


,


,


,


,


,


,


,


,


,
----

Cd
,


,


,


,


,


,


,


,


,


,


,


,


,
----

Rock
,


,


,


,


,


,


,


,


,


,


,


,


,
----

Les musclés
,


,


,


,


,


,


,


,


,


,


,


,


,
----

Best of
,


,


,


,


,


,


,


,


,


,


,


,


,
----

Font la fête
,


,


,


,


,


,


,


,


,


,


,


,


,
----

etc,


,


,


,


,


,


,


,


,


,


,


,






Ainsi, en ne saisissant que la vente des albums, le calcul se ferait autiomatiquement par artiste, puis par type de musique, puis par support et enfin par lieu.

Je guettes.
++
0
nougitch Messages postés 431 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 17 novembre 2008
24 avril 2006 à 17:09
Pour en revenir à mon problème...
Je n'arrive pas à sélectionner les différents totaux pour les insérer dans la base.

Merci pour votre aide
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
25 avril 2006 à 09:19
Hello,

je ne pige pas : tes totaux ne sont pas déjà dans ta base ? Les ventes sont déjà insérées, non ? Le total que tu veux afficher, tu vas bien aller le chercher dans ta base ? à coup de GROUP BY et de SUM ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nougitch Messages postés 431 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 17 novembre 2008
25 avril 2006 à 09:55
Salut,

Non, en fait c'est un reporting.
Le tableau est vide à la base et c'est en ne saisissant que les plus petites entités (les ventes sur les albums dans mon exemple) que j'obtiendrai tous les totaux.

Merci.
0
nougitch Messages postés 431 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 17 novembre 2008
25 avril 2006 à 10:07
La table, que nous appèlerons tbl_ventes est générée automatiquement à partir d'une zone d'administration où sont insérés les lieux, les supports, les genres musicaux, les artistes, et enfin, les albums.

La table est initialisée à zéro.
Après, dans ma partie input, j'ai une boucle qui reconstitue le tableau ci-dessus.
Chaque champ texte possède un identifiant unique.
0
nougitch Messages postés 431 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 17 novembre 2008
25 avril 2006 à 10:34
Sachant que sur la page, il y a des onglets correspondants aux lieux.
Par défaut, lorsqu'on arrive sur la page, le lieu est le premier trouvé dans la base.

En adaptant à l'exemple des ventes, j'avais fait ceci, qui fonctionnait pour le total du lieu sur lequel l'utilisateur saisi.

<?php
// récupération du lieu sélectionné par l'utilisateur
$lieu = $_POST['lieu'];
// initialisation du total
$total_lieux = 0;
// requête sélectionnant toutes les données de niveau 5, les albums$req_total_lieux mysql_query("SELECT * FROM tbl_ventes WHERE level '5'");
// tant qu'il y a des données correspondant à ma requete
while ($rec_total_lieux = mysql_fetch_array($req_total_lieux)) {
// pour chaque mois
for ($i = 1; $i <= 12; $i++) {
// si c'est le mois de janvier
if ($i == 1) {
// réconstitution des nom des champs des albums en vue de récupérer leurs valeurs
$champ = 'niveau5lieu'. $rec_total_lieux['lieu'] .'support'. $rec_total_lieux['support'] .'genre'. $rec_total_lieux['genre'] .'artiste'. $rec_total_lieux['artiste'] .'album'. $rec_total_lieux['album'] .'janvier';
// récupèration les valeurs des champs correspondant aux albums
$valeur_champ = $_POST[$champ];
// ajout dans ma nouvelle variable
$nouvelle_valeur_champ = $valeur_champ;
// incrémentation de ma nouvelle variable au total
$total_lieux = $total_lieux + $nouvelle_valeur_champ;
// fin de condition 'si c'est le mois de janvier'
}
// fin de boucle 'pour chaque mois'
}
// fin de boucle 'tant qu'il y a des données correspondant à ma requete'
}
// requête sélectionnant toutes les données de niveau 1, les lieux$req_lieux mysql_query("SELECT * FROM tbl_ventes WHERE level 1 AND lieu = '$lieu'");
// récupération des données correspondant à ma requête
$rec_lieux = mysql_fetch_array($req_lieux);
// insertion du total pour le lieu sélectionné par l'utilisateurmysql_query("UPDATE tbl_ventes SET janvier '$total_lieux' WHERE niveau '1' AND lieu = '$lieu'");
?>
0