Bonjour
j'utilise pour la première fois des tableaux en php.
j'ai un premier tableau qui récupère des enregistrements dans la base
d'un ERP
do{
$Date = odbc_result($RECUP_LPV,10);
$anne_pie = substr($Date,0,4);
$mois_pie = substr($Date,5,2);
$ligne=array(
"code" => odbc_result($RECUP_LPV,6),
"quantite" => odbc_result($RECUP_LPV,7),
"mois" => $mois_pie,
"annee" => $anne_pie,
"montant" => odbc_result($RECUP_LPV,8)
);
$tableau[$t]=$ligne;
$t++;
}while (odbc_fetch_row($RECUP_LPV));
Une fois cette récupération faite (j'ai bon ou pas ?),
je souhaiterai
obtenir un second tableau ne contenant pour une année donné qu'un
enregistrement pour un même "code".
voilà ce que j'ai écrit :
<?foreach($tableau as $element){
if($element['annee']==$anneeN){ //Si je suis sur l'année N
if($num_mois='00'){ //Si je veux les données sur l'année entière
if ($Firsttime_anneeN){ //pour renseigner la première ligne du
tableau trié
$liste_artN['0'] = $element;
$Firsttime_anneeNúlse;
$j++;
}else{
$k=0;
foreach($liste_artN as $toto){
if ($toto['code'] == $element['code']){
$tab=array(
"code" => $toto['code'],
"quantite" =>
$element['quantite']+$toto['quantite'],
"mois" => "*",
"annee" => $element['annee'],
"montant" => $element['montant']+$toto['montant']
);
$liste_artN[$k]=$tab;
break;
}
else{
$liste_artN[] = $element;
}
$k++;
}
$j++;
}
}else{ //Sinon, mettre selectionner les donnée du mois choisi
}
}else{ //Sinon, je suis sur l'année N-1
}
$i++;
}
Je pense que c'est pas terrible
vu que je n'obtiens qu'un enregistrement
dans le tableau $liste_artN et que je ne vois pas trop à quoi cela
correspond :-(
Si qqn à une petite idée, je suis preneur.
Bonjour
j'utilise pour la première fois des tableaux en php.
j'ai un premier tableau qui récupère des enregistrements dans la base
d'un ERP
do{
$Date = odbc_result($RECUP_LPV,10);
$anne_pie = substr($Date,0,4);
$mois_pie = substr($Date,5,2);
$ligne=array(
"code" => odbc_result($RECUP_LPV,6),
"quantite" => odbc_result($RECUP_LPV,7),
"mois" => $mois_pie,
"annee" => $anne_pie,
"montant" => odbc_result($RECUP_LPV,8)
);
$tableau[$t]=$ligne;
$t++;
}while (odbc_fetch_row($RECUP_LPV));
Une fois cette récupération faite (j'ai bon ou pas ?),
je souhaiterai
obtenir un second tableau ne contenant pour une année donné qu'un
enregistrement pour un même "code".
voilà ce que j'ai écrit :
<?foreach($tableau as $element){
if($element['annee']==$anneeN){ //Si je suis sur l'année N
if($num_mois='00'){ //Si je veux les données sur l'année entière
if ($Firsttime_anneeN){ //pour renseigner la première ligne du
tableau trié
$liste_artN['0'] = $element;
$Firsttime_anneeNúlse;
$j++;
}else{
$k=0;
foreach($liste_artN as $toto){
if ($toto['code'] == $element['code']){
$tab=array(
"code" => $toto['code'],
"quantite" =>
$element['quantite']+$toto['quantite'],
"mois" => "*",
"annee" => $element['annee'],
"montant" => $element['montant']+$toto['montant']
);
$liste_artN[$k]=$tab;
break;
}
else{
$liste_artN[] = $element;
}
$k++;
}
$j++;
}
}else{ //Sinon, mettre selectionner les donnée du mois choisi
}
}else{ //Sinon, je suis sur l'année N-1
}
$i++;
}
Je pense que c'est pas terrible
vu que je n'obtiens qu'un enregistrement
dans le tableau $liste_artN et que je ne vois pas trop à quoi cela
correspond :-(
Si qqn à une petite idée, je suis preneur.
Bonjour
j'utilise pour la première fois des tableaux en php.
j'ai un premier tableau qui récupère des enregistrements dans la base
d'un ERP
do{
$Date = odbc_result($RECUP_LPV,10);
$anne_pie = substr($Date,0,4);
$mois_pie = substr($Date,5,2);
$ligne=array(
"code" => odbc_result($RECUP_LPV,6),
"quantite" => odbc_result($RECUP_LPV,7),
"mois" => $mois_pie,
"annee" => $anne_pie,
"montant" => odbc_result($RECUP_LPV,8)
);
$tableau[$t]=$ligne;
$t++;
}while (odbc_fetch_row($RECUP_LPV));
Une fois cette récupération faite (j'ai bon ou pas ?),
je souhaiterai
obtenir un second tableau ne contenant pour une année donné qu'un
enregistrement pour un même "code".
voilà ce que j'ai écrit :
<?foreach($tableau as $element){
if($element['annee']==$anneeN){ //Si je suis sur l'année N
if($num_mois='00'){ //Si je veux les données sur l'année entière
if ($Firsttime_anneeN){ //pour renseigner la première ligne du
tableau trié
$liste_artN['0'] = $element;
$Firsttime_anneeNúlse;
$j++;
}else{
$k=0;
foreach($liste_artN as $toto){
if ($toto['code'] == $element['code']){
$tab=array(
"code" => $toto['code'],
"quantite" =>
$element['quantite']+$toto['quantite'],
"mois" => "*",
"annee" => $element['annee'],
"montant" => $element['montant']+$toto['montant']
);
$liste_artN[$k]=$tab;
break;
}
else{
$liste_artN[] = $element;
}
$k++;
}
$j++;
}
}else{ //Sinon, mettre selectionner les donnée du mois choisi
}
}else{ //Sinon, je suis sur l'année N-1
}
$i++;
}
Je pense que c'est pas terrible
vu que je n'obtiens qu'un enregistrement
dans le tableau $liste_artN et que je ne vois pas trop à quoi cela
correspond :-(
Si qqn à une petite idée, je suis preneur.
Et oui, c'est le problème de la "programmation accidentelle" (je te
laisse chercher la définition, mais je pense que le terme est assez
parlant !-).
Et oui, c'est le problème de la "programmation accidentelle" (je te
laisse chercher la définition, mais je pense que le terme est assez
parlant !-).
Et oui, c'est le problème de la "programmation accidentelle" (je te
laisse chercher la définition, mais je pense que le terme est assez
parlant !-).
Le terme est assez parlant en effet. Sinon, une rapide recherche donne
trois utilisations de ce terme, deux par un certain Bruno Desthuilliers,
l'autre par un dénommé bruno modulix.
Le terme est assez parlant en effet. Sinon, une rapide recherche donne
trois utilisations de ce terme, deux par un certain Bruno Desthuilliers,
l'autre par un dénommé bruno modulix.
Le terme est assez parlant en effet. Sinon, une rapide recherche donne
trois utilisations de ce terme, deux par un certain Bruno Desthuilliers,
l'autre par un dénommé bruno modulix.
);
$tableau[$t]=$ligne;
$t++;
Tu n'a pas besoin de gérer les indices comme çà. Il suffit d'ajouter "à
la fin" du tableau:
$tableau[] = $ligne;
Accessoirement, "$tableau", c'est pas terrible comme nom.
}while (odbc_fetch_row($RECUP_LPV));
Une fois cette récupération faite (j'ai bon ou pas ?),
Tu n'a pas testé ton code ?
Et je note que tu a vraiment un problème avec le nommage. Déjà, évite le
franglais autant que possible, ensuite décide-toi pour une convention de
nommage (all_lower ou mixedCase) et tiens-y toi une bonne fois pour
toute. Ca évite bien des typos, qui sont très pénibles à débugger en PHP.
$j++;
"$j" non défini.
}else{
>$k=0;
foreach($liste_artN as $toto){
(Argh ! Non, pas "$toto" !)
A ce stade, tu a au mieux un élément dans $liste_artN.if ($toto['code'] == $element['code']){
$tab=array(
"code" => $toto['code'],
"quantite" => $element['quantite']+$toto['quantite'],
"mois" => "*",
"annee" => $element['annee'],
"montant" => $element['montant']+$toto['montant']
);
$liste_artN[$k]=$tab;
Et si jamais tu avais un élément dans $liste_artN, tu viens de l'écraser.
break;
}
else{
$liste_artN[] = $element;
Toujours dans le cas (improbable vu le code que tu montres) où tu aurais
un élément dans $liste_artN[], tu viens de le dupliquer. Accessoirement,
modifier un tableau sur lequel on itère est rarement une bonne idée.
);
$tableau[$t]=$ligne;
$t++;
Tu n'a pas besoin de gérer les indices comme çà. Il suffit d'ajouter "à
la fin" du tableau:
$tableau[] = $ligne;
Accessoirement, "$tableau", c'est pas terrible comme nom.
}while (odbc_fetch_row($RECUP_LPV));
Une fois cette récupération faite (j'ai bon ou pas ?),
Tu n'a pas testé ton code ?
Et je note que tu a vraiment un problème avec le nommage. Déjà, évite le
franglais autant que possible, ensuite décide-toi pour une convention de
nommage (all_lower ou mixedCase) et tiens-y toi une bonne fois pour
toute. Ca évite bien des typos, qui sont très pénibles à débugger en PHP.
$j++;
"$j" non défini.
}else{
>
$k=0;
foreach($liste_artN as $toto){
(Argh ! Non, pas "$toto" !)
A ce stade, tu a au mieux un élément dans $liste_artN.
if ($toto['code'] == $element['code']){
$tab=array(
"code" => $toto['code'],
"quantite" => $element['quantite']+$toto['quantite'],
"mois" => "*",
"annee" => $element['annee'],
"montant" => $element['montant']+$toto['montant']
);
$liste_artN[$k]=$tab;
Et si jamais tu avais un élément dans $liste_artN, tu viens de l'écraser.
break;
}
else{
$liste_artN[] = $element;
Toujours dans le cas (improbable vu le code que tu montres) où tu aurais
un élément dans $liste_artN[], tu viens de le dupliquer. Accessoirement,
modifier un tableau sur lequel on itère est rarement une bonne idée.
);
$tableau[$t]=$ligne;
$t++;
Tu n'a pas besoin de gérer les indices comme çà. Il suffit d'ajouter "à
la fin" du tableau:
$tableau[] = $ligne;
Accessoirement, "$tableau", c'est pas terrible comme nom.
}while (odbc_fetch_row($RECUP_LPV));
Une fois cette récupération faite (j'ai bon ou pas ?),
Tu n'a pas testé ton code ?
Et je note que tu a vraiment un problème avec le nommage. Déjà, évite le
franglais autant que possible, ensuite décide-toi pour une convention de
nommage (all_lower ou mixedCase) et tiens-y toi une bonne fois pour
toute. Ca évite bien des typos, qui sont très pénibles à débugger en PHP.
$j++;
"$j" non défini.
}else{
>$k=0;
foreach($liste_artN as $toto){
(Argh ! Non, pas "$toto" !)
A ce stade, tu a au mieux un élément dans $liste_artN.if ($toto['code'] == $element['code']){
$tab=array(
"code" => $toto['code'],
"quantite" => $element['quantite']+$toto['quantite'],
"mois" => "*",
"annee" => $element['annee'],
"montant" => $element['montant']+$toto['montant']
);
$liste_artN[$k]=$tab;
Et si jamais tu avais un élément dans $liste_artN, tu viens de l'écraser.
break;
}
else{
$liste_artN[] = $element;
Toujours dans le cas (improbable vu le code que tu montres) où tu aurais
un élément dans $liste_artN[], tu viens de le dupliquer. Accessoirement,
modifier un tableau sur lequel on itère est rarement une bonne idée.
[...] est-ce la meilleure méthode ?
[...] est-ce la meilleure méthode ?
[...] est-ce la meilleure méthode ?
Le 05/02/2010 12:54, Jerome a écrit :
[...] est-ce la meilleure méthode ?
Bruno t'avait déjà répondu ceci :
<cit. news:4b6a9c4e$0$12192$
tes données sont dans une base SQL ? Si oui, apprend à écrire la requête
SQL qui va bien. Regarde du côté des fonctions d'aggrégation et des
clauses "group by" et "having".
</cit.>
Je pense en effet que c'est ça, la meilleure méthode (quoique je sois
incompétent pour expliquer comment faire).
Soit dit en passant, puisque ton adresse est manifestement invalide, il
serait bienvenu de la signaler correctement comme telle, en la faisant
suivre par les 8 caractères « .invalid » (TLD réservé à cet effet auprès
de l'IANA). Donc :
Jerome
Le 05/02/2010 12:54, Jerome a écrit :
[...] est-ce la meilleure méthode ?
Bruno t'avait déjà répondu ceci :
<cit. news:4b6a9c4e$0$12192$426a34cc@news.free.fr>
tes données sont dans une base SQL ? Si oui, apprend à écrire la requête
SQL qui va bien. Regarde du côté des fonctions d'aggrégation et des
clauses "group by" et "having".
</cit.>
Je pense en effet que c'est ça, la meilleure méthode (quoique je sois
incompétent pour expliquer comment faire).
Soit dit en passant, puisque ton adresse est manifestement invalide, il
serait bienvenu de la signaler correctement comme telle, en la faisant
suivre par les 8 caractères « .invalid » (TLD réservé à cet effet auprès
de l'IANA). Donc :
Jerome<pSoPuAbMeSlPlAeM_SvPeArMte@ySaPhAoMo.fr.invalid>
Le 05/02/2010 12:54, Jerome a écrit :
[...] est-ce la meilleure méthode ?
Bruno t'avait déjà répondu ceci :
<cit. news:4b6a9c4e$0$12192$
tes données sont dans une base SQL ? Si oui, apprend à écrire la requête
SQL qui va bien. Regarde du côté des fonctions d'aggrégation et des
clauses "group by" et "having".
</cit.>
Je pense en effet que c'est ça, la meilleure méthode (quoique je sois
incompétent pour expliquer comment faire).
Soit dit en passant, puisque ton adresse est manifestement invalide, il
serait bienvenu de la signaler correctement comme telle, en la faisant
suivre par les 8 caractères « .invalid » (TLD réservé à cet effet auprès
de l'IANA). Donc :
Jerome
1) ma requete récupère pour les années N et N-1 tous les codes articles
vendus, leurs quantité, la date de vente et le montant.
2) je mets les données dans le tableau $donnees_brutesBDD
3)je veux créer un nouveau tableau $liste_artN qui contiendra les
données agrégées. Cad, une ligne par article avec un cumul des quantités
et des montants.
4)Quand le code pour l'année sera bon, je le dupliquerais pour faire un
second tableau contenant un enregistrement par code ET par mois.
pour
ensuite mettre en page des statistiques de vente comparatives (mois par
mois, année par année, ...)
==> le code ci-dessous que j'ai réalisé suite à tes conseils et des
recherches fonctionne enfin, mais est-ce la meilleure méthode ?
do{
$Date = odbc_result($RECUP_LPV,10);
$anne_pie = substr($Date,0,4);
$mois_pie = substr($Date,5,2);
$ligne_article=array(
"code" => odbc_result($RECUP_LPV,6),
"quantite" => odbc_result($RECUP_LPV,7),
"mois" => $mois_pie,
"annee" => $anne_pie,
"montant" => odbc_result($RECUP_LPV,8)
);
$donnees_brutesBDD[]=$ligne_article;
}while (odbc_fetch_row($RECUP_LPV));
foreach($donnees_brutesBDD as $ligne_article)
{
if($ligne_article['annee']==$anneeN){ //Si je suis sur l'année N
($anneeN est initialisé au début du code à l'année en cours soit 2010)
if($num_mois_texte=='00'){ //$num_mois_texte est transmis par un
formulaire , c'est 00 pour obtenir l'année compète, 01 pour le mois de
janvier, 02 pour février ...
if ($premier_enregistrement_anneeN){ //initialisé à true en début de
scipt
$liste_artN[] = $ligne_article;
$liste_artN['0']['mois'] = "***";
$premier_enregistrement_anneeNúlse;
}else{
foreach($liste_artN as $cle => $ligne_artN)
{
if($ligne_artN['code']==$ligne_article['code']){
$position=$cle;
break;
}else {$position="";}
}
1) ma requete récupère pour les années N et N-1 tous les codes articles
vendus, leurs quantité, la date de vente et le montant.
2) je mets les données dans le tableau $donnees_brutesBDD
3)je veux créer un nouveau tableau $liste_artN qui contiendra les
données agrégées. Cad, une ligne par article avec un cumul des quantités
et des montants.
4)Quand le code pour l'année sera bon, je le dupliquerais pour faire un
second tableau contenant un enregistrement par code ET par mois.
pour
ensuite mettre en page des statistiques de vente comparatives (mois par
mois, année par année, ...)
==> le code ci-dessous que j'ai réalisé suite à tes conseils et des
recherches fonctionne enfin, mais est-ce la meilleure méthode ?
do{
$Date = odbc_result($RECUP_LPV,10);
$anne_pie = substr($Date,0,4);
$mois_pie = substr($Date,5,2);
$ligne_article=array(
"code" => odbc_result($RECUP_LPV,6),
"quantite" => odbc_result($RECUP_LPV,7),
"mois" => $mois_pie,
"annee" => $anne_pie,
"montant" => odbc_result($RECUP_LPV,8)
);
$donnees_brutesBDD[]=$ligne_article;
}while (odbc_fetch_row($RECUP_LPV));
foreach($donnees_brutesBDD as $ligne_article)
{
if($ligne_article['annee']==$anneeN){ //Si je suis sur l'année N
($anneeN est initialisé au début du code à l'année en cours soit 2010)
if($num_mois_texte=='00'){ //$num_mois_texte est transmis par un
formulaire , c'est 00 pour obtenir l'année compète, 01 pour le mois de
janvier, 02 pour février ...
if ($premier_enregistrement_anneeN){ //initialisé à true en début de
scipt
$liste_artN[] = $ligne_article;
$liste_artN['0']['mois'] = "***";
$premier_enregistrement_anneeNúlse;
}else{
foreach($liste_artN as $cle => $ligne_artN)
{
if($ligne_artN['code']==$ligne_article['code']){
$position=$cle;
break;
}else {$position="";}
}
1) ma requete récupère pour les années N et N-1 tous les codes articles
vendus, leurs quantité, la date de vente et le montant.
2) je mets les données dans le tableau $donnees_brutesBDD
3)je veux créer un nouveau tableau $liste_artN qui contiendra les
données agrégées. Cad, une ligne par article avec un cumul des quantités
et des montants.
4)Quand le code pour l'année sera bon, je le dupliquerais pour faire un
second tableau contenant un enregistrement par code ET par mois.
pour
ensuite mettre en page des statistiques de vente comparatives (mois par
mois, année par année, ...)
==> le code ci-dessous que j'ai réalisé suite à tes conseils et des
recherches fonctionne enfin, mais est-ce la meilleure méthode ?
do{
$Date = odbc_result($RECUP_LPV,10);
$anne_pie = substr($Date,0,4);
$mois_pie = substr($Date,5,2);
$ligne_article=array(
"code" => odbc_result($RECUP_LPV,6),
"quantite" => odbc_result($RECUP_LPV,7),
"mois" => $mois_pie,
"annee" => $anne_pie,
"montant" => odbc_result($RECUP_LPV,8)
);
$donnees_brutesBDD[]=$ligne_article;
}while (odbc_fetch_row($RECUP_LPV));
foreach($donnees_brutesBDD as $ligne_article)
{
if($ligne_article['annee']==$anneeN){ //Si je suis sur l'année N
($anneeN est initialisé au début du code à l'année en cours soit 2010)
if($num_mois_texte=='00'){ //$num_mois_texte est transmis par un
formulaire , c'est 00 pour obtenir l'année compète, 01 pour le mois de
janvier, 02 pour février ...
if ($premier_enregistrement_anneeN){ //initialisé à true en début de
scipt
$liste_artN[] = $ligne_article;
$liste_artN['0']['mois'] = "***";
$premier_enregistrement_anneeNúlse;
}else{
foreach($liste_artN as $cle => $ligne_artN)
{
if($ligne_artN['code']==$ligne_article['code']){
$position=$cle;
break;
}else {$position="";}
}
Olivier Miakinen a écrit :Le 05/02/2010 12:54, Jerome a écrit :
[...] est-ce la meilleure méthode ?
Bruno t'avait déjà répondu ceci :
<cit. news:4b6a9c4e$0$12192$
tes données sont dans une base SQL ? Si oui, apprend à écrire la requête
SQL qui va bien. Regarde du côté des fonctions d'aggrégation et des
clauses "group by" et "having".
</cit.>
Je pense en effet que c'est ça, la meilleure méthode (quoique je sois
incompétent pour expliquer comment faire).
J'interroge la BDD via un driver ODBC spécifique à l'ERP.
Or il s'avère que ce driver est d'une *effroyable* lenteur.
Je préfère donc récupérer en une seule fois toutes mes données dans
l'ordre où elles arrivent (dans l'exemple dont il est question, je
récupère uniquement les enregistrement des années N et N-1).
Car même avec access, la fonction groupby me fait planter le traitement!
Olivier Miakinen a écrit :
Le 05/02/2010 12:54, Jerome a écrit :
[...] est-ce la meilleure méthode ?
Bruno t'avait déjà répondu ceci :
<cit. news:4b6a9c4e$0$12192$426a34cc@news.free.fr>
tes données sont dans une base SQL ? Si oui, apprend à écrire la requête
SQL qui va bien. Regarde du côté des fonctions d'aggrégation et des
clauses "group by" et "having".
</cit.>
Je pense en effet que c'est ça, la meilleure méthode (quoique je sois
incompétent pour expliquer comment faire).
J'interroge la BDD via un driver ODBC spécifique à l'ERP.
Or il s'avère que ce driver est d'une *effroyable* lenteur.
Je préfère donc récupérer en une seule fois toutes mes données dans
l'ordre où elles arrivent (dans l'exemple dont il est question, je
récupère uniquement les enregistrement des années N et N-1).
Car même avec access, la fonction groupby me fait planter le traitement!
Olivier Miakinen a écrit :Le 05/02/2010 12:54, Jerome a écrit :
[...] est-ce la meilleure méthode ?
Bruno t'avait déjà répondu ceci :
<cit. news:4b6a9c4e$0$12192$
tes données sont dans une base SQL ? Si oui, apprend à écrire la requête
SQL qui va bien. Regarde du côté des fonctions d'aggrégation et des
clauses "group by" et "having".
</cit.>
Je pense en effet que c'est ça, la meilleure méthode (quoique je sois
incompétent pour expliquer comment faire).
J'interroge la BDD via un driver ODBC spécifique à l'ERP.
Or il s'avère que ce driver est d'une *effroyable* lenteur.
Je préfère donc récupérer en une seule fois toutes mes données dans
l'ordre où elles arrivent (dans l'exemple dont il est question, je
récupère uniquement les enregistrement des années N et N-1).
Car même avec access, la fonction groupby me fait planter le traitement!