Problème d'incrémentation
Fermé
zerdg
Messages postés
86
Date d'inscription
jeudi 21 mai 2015
Statut
Membre
Dernière intervention
30 novembre 2017
-
Modifié par zerdg le 8/06/2015 à 15:34
zerdg Messages postés 86 Date d'inscription jeudi 21 mai 2015 Statut Membre Dernière intervention 30 novembre 2017 - 10 juin 2015 à 12:52
zerdg Messages postés 86 Date d'inscription jeudi 21 mai 2015 Statut Membre Dernière intervention 30 novembre 2017 - 10 juin 2015 à 12:52
A voir également:
- Problème d'incrémentation
- Renommer plusieurs fichiers incrémentation - Guide
- Excel copier formule sans incrémentation ✓ - Forum Excel
- Excel copier formule avec incrémentation ✓ - Forum Excel
- Copier sans incrémenter et sans conserver le format ✓ - Forum Excel
- Changer le pas d'incrémentation excel - Forum Excel
6 réponses
jordane45
Messages postés
38137
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 avril 2024
4 649
8 juin 2015 à 15:50
8 juin 2015 à 15:50
Bonjour,
Pour nous aider à comprendre, le code d'origine que tu as voulu simplifié serait le bien venue.
Je suppose que, dans ton code actuel ..
$ligne .. correspond à la première ligne où écrire ton tableau 1 ... et $ligne2 ..; celle de ton tableau 2.
Que se passe t-il .. si ton tableau 1 comporte plus de 4 lignes ?
Il va forcément déborder sur ton second tableau....
Pour nous aider à comprendre, le code d'origine que tu as voulu simplifié serait le bien venue.
Je suppose que, dans ton code actuel ..
$ligne .. correspond à la première ligne où écrire ton tableau 1 ... et $ligne2 ..; celle de ton tableau 2.
Que se passe t-il .. si ton tableau 1 comporte plus de 4 lignes ?
Il va forcément déborder sur ton second tableau....
zerdg
Messages postés
86
Date d'inscription
jeudi 21 mai 2015
Statut
Membre
Dernière intervention
30 novembre 2017
2
8 juin 2015 à 15:58
8 juin 2015 à 15:58
le code que j'ai voulut simplifier (ce que j'ai tenté n'ai pas le résultat final que je souhaite atteindre):
ça marche mais c'est long et ça prend de la place pour rien du coup
//lundi $ligne1= 3;//correspond à la ligne où la formule est écrite $a=2;//correspond à la ligne où la formule doit chercher la chaine de caractère while($data2 = $req3->fetch(PDO::FETCH_ASSOC)){ $heure1 =4;//incrémente l'heure pour la chaine de caractère $heure2 =5;// $colonne = 'A';//correspond à la colonne où la liste d'identifiant est écrite $colonne2 = 'B';//correspond à la colonne où la formule est écrite foreach($data2 as $value){ $sheet4->setCellValue($colonne.$ligne1, $value);//liste des identifiant for ($i=0; $i <=17 ; $i++) { $sheet4->setCellValue( $colonne2++.$ligne1,'=COUNTIF(\'tout à fait\'!Q'.$a.',"*'.$heure1++.'H30*")',PHPExcel_Cell_DataType::TYPE_FORMULA);//la formule qui cherche dans la feuille tout à fait l'$heure1 $sheet4->setCellValue( $colonne2++.$ligne1,'=COUNTIF(\'tout à fait\'!Q'.$a.',"*'.$heure2++.'H00*")',PHPExcel_Cell_DataType::TYPE_FORMULA);//''''''''''''''''''''''''''''''''''''''''''''''''''' l'$heure2 } $colonne2++; } $ligne1++; $a++; } //mardi $ligne2=$ligne1+3; $b = 2; while($data2 = $req4->fetch(PDO::FETCH_ASSOC)){ $heure1 =4; $heure2 =5; $colonne = 'A'; $colonne2 = 'B'; foreach($data2 as $value){ $sheet4->setCellValue($colonne.$ligne2, $value); for ($i=0; $i <=17 ; $i++) { $sheet4->setCellValue( $colonne2++.$ligne2,'=COUNTIF(\'tout à fait\'!R'.$b.',"*'.$heure1++.'H30*")',PHPExcel_Cell_DataType::TYPE_FORMULA); $sheet4->setCellValue( $colonne2++.$ligne2,'=COUNTIF(\'tout à fait\'!R'.$b.',"*'.$heure2++.'H00*")',PHPExcel_Cell_DataType::TYPE_FORMULA); } $colonne2++; } $ligne2++; $b++; } $ligne3=$ligne2+3; $c=2; while($data2 = $req5->fetch(PDO::FETCH_ASSOC)){ $heure1 =4; $heure2 =5; $colonne = 'A'; $colonne2 = 'B'; foreach($data2 as $value){ $sheet4->setCellValue($colonne.$ligne3, $value); for ($i=0; $i <=17 ; $i++) { $sheet4->setCellValue( $colonne2++.$ligne3,'=COUNTIF(\'tout à fait\'!S'.$c.',"*'.$heure1++.'H30*")',PHPExcel_Cell_DataType::TYPE_FORMULA); $sheet4->setCellValue( $colonne2++.$ligne3,'=COUNTIF(\'tout à fait\'!S'.$c.',"*'.$heure2++.'H00*")',PHPExcel_Cell_DataType::TYPE_FORMULA); } $colonne2++; } $ligne3++; $c++; } $ligne4=$ligne3+3; $d=2; while($data2 = $req6->fetch(PDO::FETCH_ASSOC)){ $heure1 =4; $heure2 =5; $colonne = 'A'; $colonne2 = 'B'; foreach($data2 as $value){ $sheet4->setCellValue($colonne.$ligne4, $value); for ($i=0; $i <=17 ; $i++) { $sheet4->setCellValue( $colonne2++.$ligne4,'=COUNTIF(\'tout à fait\'!T'.$d.',"*'.$heure1++.'H30*")',PHPExcel_Cell_DataType::TYPE_FORMULA); $sheet4->setCellValue( $colonne2++.$ligne4,'=COUNTIF(\'tout à fait\'!T'.$d.',"*'.$heure2++.'H00*")',PHPExcel_Cell_DataType::TYPE_FORMULA); } $colonne2++; } $ligne4++; $d++; } $ligne5=$ligne4+3; $e=2; while($data2 = $req7->fetch(PDO::FETCH_ASSOC)){ $heure1 =4; $heure2 =5; $colonne = 'A'; $colonne2 = 'B'; foreach($data2 as $value){ $sheet4->setCellValue($colonne.$ligne5, $value); for ($i=0; $i <=17 ; $i++) { $sheet4->setCellValue( $colonne2++.$ligne5,'=COUNTIF(\'tout à fait\'!U'.$e.',"*'.$heure1++.'H30*")',PHPExcel_Cell_DataType::TYPE_FORMULA); $sheet4->setCellValue( $colonne2++.$ligne5,'=COUNTIF(\'tout à fait\'!U'.$e.',"*'.$heure2++.'H00*")',PHPExcel_Cell_DataType::TYPE_FORMULA); } $colonne2++; } $e++; $ligne5++; }
ça marche mais c'est long et ça prend de la place pour rien du coup
jordane45
Messages postés
38137
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 avril 2024
4 649
10 juin 2015 à 11:17
10 juin 2015 à 11:17
Tes tableaux semblent être identique (hormis le fait que tu sembles faire plusieurs requêtes différentes.. en fonction du jour....)
A mon avis.. la première chose à regarder serait :
Ne peut on pas faire UNE SEULE requête ?
Pourrais tu nous fournir la structure de tes tables ainsi que les requêtes que tu as fait pour tes différents tableaux ?
A mon avis.. la première chose à regarder serait :
Ne peut on pas faire UNE SEULE requête ?
Pourrais tu nous fournir la structure de tes tables ainsi que les requêtes que tu as fait pour tes différents tableaux ?
zerdg
Messages postés
86
Date d'inscription
jeudi 21 mai 2015
Statut
Membre
Dernière intervention
30 novembre 2017
2
10 juin 2015 à 11:28
10 juin 2015 à 11:28
En fait si j'utilise la même requête pour chaque tableaux le 1er tableau s'affiche correctement mais pour les suivant je n'arrive pas afficher autre chose que la dernière valeur de la table du coup j'ai fait comme ça en attendant de trouver autre chose. De plus les requêtes sont identique.
Pour la structure des mes tables j'en deux dont une seule qui m'est utile ici je dois poster un fichier export ou autre chose?
les requêtes :
Pour la structure des mes tables j'en deux dont une seule qui m'est utile ici je dois poster un fichier export ou autre chose?
les requêtes :
$code = $_POST['code']; $sql3 = 'SELECT identifiant FROM reponses where maniere = "accueil régulier" AND employeur = "oui, tout à fait" AND code ="' .$code. '"'; $req3 = $bdd->prepare($sql3, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $req3 ->execute(); $sql4 = 'SELECT identifiant FROM reponses where maniere = "accueil régulier"AND employeur = "oui, tout à fait"AND code ="' .$code. '"'; $req4 = $bdd->prepare($sql4, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $req4 ->execute(); $sql5 = 'SELECT identifiant FROM reponses where maniere = "accueil régulier"AND employeur = "oui, tout à fait"AND code ="' .$code. '"'; $req5 = $bdd->prepare($sql5, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $req5 ->execute(); $sql6 = 'SELECT identifiant FROM reponses where maniere = "accueil régulier"AND employeur = "oui, tout à fait"AND code ="' .$code. '"'; $req6 = $bdd->prepare($sql6, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $req6 ->execute(); $sql7 = 'SELECT identifiant FROM reponses where maniere = "accueil régulier"AND employeur = "oui, tout à fait"AND code ="' .$code. '"'; $req7 = $bdd->prepare($sql7, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jordane45
Messages postés
38137
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 avril 2024
4 649
10 juin 2015 à 11:51
10 juin 2015 à 11:51
Tu sembles utiliser PDO pour te connecter à la BDD...
très bien.
Donc:
Ensuite, pour générer tes tableaux... il te suffit de boucler (autant de fois que tu le veux) sur l'array.
cela permet de ne faire qu'une seule connextion à ta BDD et donc.. de gagner du temps.
PS : Penses aussi.. si ce n'est pas déjà fait, à INDEXER les champs de ta table.
Principalement ceux qui servent dans ta clausse WHERE ( maniere, employeur, code).
PS2 : Dans le cas où tu serais amené à ajouter des employeurs .. il serait préférable de te faire une table dédiée ... et de ne mettre dans ta table actuelle que l' ID correspondant
tableemployeur ( id, employeur, adresse, telephone etc ....)
=> Idem pour "maniere" : tablemaniere ( id, maniere ....)
===>> Il vaut mieux travailler avec des ID (numériques) que des champs textes !
et ainsi.. ta requête se transformerait de la façon suivante (avec des jointures)
très bien.
Donc:
$code = isset($_POST['code'])?$_POST['code']:NULL; if($code ){ $sql = "SELECT identifiant FROM reponses WHERE maniere = 'accueil régulier' AND employeur = 'oui, tout à fait' AND code =:code "; $params = array(":code"=>$code); $req3 = $bdd->prepare($sql); $req3 ->execute($params); // on met tous les résultat dans un array: $arr_result = $req3->fetchall(); // le temps des tests.. pour voir ce que contient l'array : print_r($arr_result); }
Ensuite, pour générer tes tableaux... il te suffit de boucler (autant de fois que tu le veux) sur l'array.
cela permet de ne faire qu'une seule connextion à ta BDD et donc.. de gagner du temps.
PS : Penses aussi.. si ce n'est pas déjà fait, à INDEXER les champs de ta table.
Principalement ceux qui servent dans ta clausse WHERE ( maniere, employeur, code).
PS2 : Dans le cas où tu serais amené à ajouter des employeurs .. il serait préférable de te faire une table dédiée ... et de ne mettre dans ta table actuelle que l' ID correspondant
tableemployeur ( id, employeur, adresse, telephone etc ....)
=> Idem pour "maniere" : tablemaniere ( id, maniere ....)
===>> Il vaut mieux travailler avec des ID (numériques) que des champs textes !
et ainsi.. ta requête se transformerait de la façon suivante (avec des jointures)
$sql = "SELECT identifiant FROM reponses R LEFT JOIN tablemaniere M ON M.id = R.maniere LEFT JOIN tableemployeurs E ON E.id = R.employeur WHERE M.maniere = 'accueil régulier' AND E.employeur = 'oui, tout à fait' AND R.code =:code ";
zerdg
Messages postés
86
Date d'inscription
jeudi 21 mai 2015
Statut
Membre
Dernière intervention
30 novembre 2017
2
10 juin 2015 à 11:57
10 juin 2015 à 11:57
Merci je vais tester ça.
En fait je n'ai pas les droits n'y le droit de toucher à la base de donnée sinon je l'aurais modifiée depuis le début car toutes les champs sont en varchar sauf l'identifiant ce qui me limite beaucoup.
En fait je n'ai pas les droits n'y le droit de toucher à la base de donnée sinon je l'aurais modifiée depuis le début car toutes les champs sont en varchar sauf l'identifiant ce qui me limite beaucoup.
jordane45
Messages postés
38137
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 avril 2024
4 649
>
zerdg
Messages postés
86
Date d'inscription
jeudi 21 mai 2015
Statut
Membre
Dernière intervention
30 novembre 2017
10 juin 2015 à 12:01
10 juin 2015 à 12:01
toutes les champs sont en varchar sauf l'identifiant ce qui me limite beaucoup.
Arf... et ce qui peu aussi expliquer tes "lenteurs" ...
zerdg
Messages postés
86
Date d'inscription
jeudi 21 mai 2015
Statut
Membre
Dernière intervention
30 novembre 2017
2
10 juin 2015 à 12:29
10 juin 2015 à 12:29
Dans l'array il y a les identidiants
jordane45
Messages postés
38137
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 avril 2024
4 649
10 juin 2015 à 12:49
10 juin 2015 à 12:49
Donc c'est bon non ?
zerdg
Messages postés
86
Date d'inscription
jeudi 21 mai 2015
Statut
Membre
Dernière intervention
30 novembre 2017
2
10 juin 2015 à 12:52
10 juin 2015 à 12:52
Il me reste toujours le problème de la boucle que je n'arrive pas a faire en faite
10 juin 2015 à 10:45