Boucles imbriquées (while)

Signaler
Messages postés
431
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
17 novembre 2008
-
Messages postés
431
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
17 novembre 2008
-
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

Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
4
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
Messages postés
431
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
17 novembre 2008

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.
++
Messages postés
431
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
17 novembre 2008

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
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
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 ?
Messages postés
431
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
17 novembre 2008

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.
Messages postés
431
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
17 novembre 2008

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.
Messages postés
431
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
17 novembre 2008

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'");
?>