Page 1 sur 1
N'afficher que le plus petit et le plus grand
Posté : 07 nov. 2022, 08:41
par philippeTB
Bonjour,
voici mon code :
$NAI = 'SELECT * FROM act_Pnai3 WHERE RELEVEUR="'.$dataZ['RELEVEUR'].'" AND COMMUNE="'.$dataZ['COMMUNE'].'" ORDER BY LADATE';
$resNAI = $KwsConnectBdd->query($NAI);
$nombre_de_NAI=mysqli_num_rows($resNAI);
echo " <tr>";
echo " <td width=\"160\" bgcolor=\"#DDF1F9\"> Naissances : </td>";
echo " <td width=\"100\" bgcolor=\"#DDF1F9\"> ".$nombre_de_NAI." actes</td>";
echo " <td width=\"80\" bgcolor=\"#DDF1F9\"> Année(s) : </td>";
echo " <td width=\"160\" bgcolor=\"#DDF1F9\"> ";
while ($row = mysqli_fetch_array($resNAI)) {
$N_date = explode("-",''.$row['LADATE'].'');
$NX_date = "".$N_date[0]." ";
echo "".$NX_date."";
}
echo "</td>";
echo "</tr>";
Je vous explique, ma variable
$NX_date m'affiche toutes les années disponibles dans ma base SQL après concaténation.
Donc (exemple): 2017 2022 2025
Je souhaiterai n'afficher que "De 2017 à 2025", en gros ne conserver que la plus petite année et la plus grande afin de donner l'indication d'un intervalle.
J'ai tenté avec max($NX_date) et min($NX_date) mais rien ne s'affiche.
Je ne trouve hélas pas comment faire cela.
Merci par avance de votre aide.
Re: N'afficher que le plus petit et le plus grand
Posté : 07 nov. 2022, 11:14
par @rthur
Pour que max($NX_date) et min($NX_date) fonctionnent, il faut que $NX_date soit un tableau avec tes valeurs.
Donc le + simple c'est que dans ta boucle while tu crées un tableau en ajoutant à chaque fois la valeur que tu récupères :
$NX_date[] = $N_date[0];
La notation avec un double crochet vide [], c'est pour dire ajoute un nouvel élément au tableau $NX_date
Re: N'afficher que le plus petit et le plus grand
Posté : 07 nov. 2022, 11:22
par philippeTB
Donc le + simple c'est que dans ta boucle while tu crées un tableau en ajoutant à chaque fois la valeur que tu récupères :
$NX_date[] = $N_date[0];
La notation avec un double crochet vide [], c'est pour dire ajoute un nouvel élément au tableau $NX_date
Aurais-tu un exemple pour que je comprenne comment utiliser ta méthode ?
Je n'ai jamais fais ce genre de chose.
Merci beaucoup
Re: N'afficher que le plus petit et le plus grand
Posté : 07 nov. 2022, 13:46
par or 1
un exemple :
$NX_date[] = $N_date[0];
autre manière de faire :
SELECT min(year(LADATE)) as mini, max(year(LADATE)) as maxi FROM `act_Pnai3` WHERE RELEVEUR="'.$dataZ['RELEVEUR'].'" AND COMMUNE="'.$dataZ['COMMUNE'].'"
Re: N'afficher que le plus petit et le plus grand
Posté : 07 nov. 2022, 13:49
par philippeTB
un exemple :
$NX_date[] = $N_date[0];
autre manière de faire :
SELECT min(year(LADATE)) as mini, max(year(LADATE)) as maxi FROM `act_Pnai3` WHERE RELEVEUR="'.$dataZ['RELEVEUR'].'" AND COMMUNE="'.$dataZ['COMMUNE'].'"
merci mais tu le place où le $NX_date[] = $N_date[0]; ?
et comment récupère tu le résultat ?
Re: N'afficher que le plus petit et le plus grand
Posté : 07 nov. 2022, 13:56
par or 1
"Donc le + simple c'est que dans ta boucle while"
que fait cette ligne
$NX_date = "".$N_date[0]." ";
?
Re: N'afficher que le plus petit et le plus grand
Posté : 07 nov. 2022, 13:58
par philippeTB
"Donc le + simple c'est que dans ta boucle while"
que fait cette ligne
$NX_date = "".$N_date[0]." ";
?
elle m'affiche ça : Naissances : 4 actes Année(s) : 1980 2017 2022 2025
et moi je voulais afficher de 1980 à 2025.
parce que si le gars index 20 années je suis mal sinon...
Désolé je débute sur ce genre de requête

Re: N'afficher que le plus petit et le plus grand
Posté : 07 nov. 2022, 14:06
par or 1
non, cette ligne n'affiche rien du tout, il n'y a pas de echo.
Re: N'afficher que le plus petit et le plus grand
Posté : 07 nov. 2022, 14:28
par philippeTB
effectivement la variable sert à rien autant mettre direct $N_date[0] dans le echo je te l'accorde et je l'ai enlevé
$NAI = 'SELECT * FROM act_Pnai3 WHERE RELEVEUR="'.$dataZ['RELEVEUR'].'" AND COMMUNE="'.$dataZ['COMMUNE'].'" ORDER BY LADATE';
$resNAI = $KwsConnectBdd->query($NAI);
$nombre_de_NAI=mysqli_num_rows($resNAI);
echo " <tr>";
echo " <td width=\"160\" bgcolor=\"#DDF1F9\"> Naissances : </td>";
echo " <td width=\"100\" bgcolor=\"#DDF1F9\"> ".$nombre_de_NAI." actes</td>";
echo " <td width=\"80\" bgcolor=\"#DDF1F9\"> Année(s) : </td>";
echo " <td width=\"160\" bgcolor=\"#DDF1F9\"> ";
while ($row = mysqli_fetch_array($resNAI)) {
$N_date = explode("-",''.$row['LADATE'].'');
echo "".$N_date[0]." ";
}
mais je ne vois absolument pas où je dois mettre ton code
$NX_date[] = $N_date[0]; dans ma boucle

Re: N'afficher que le plus petit et le plus grand
Posté : 07 nov. 2022, 23:50
par philippeTB
j'ai tenté comme ça :
while ($row = mysqli_fetch_array($resNAI)) {
$N_date = explode("-",''.$row['LADATE'].'');
$NX_date[] = $N_date[0];
echo max($NX_date);
Mais le résultat est pire .... ca m'affiche toutes les années collées les unes aux autres : 1980201720222025
Re: N'afficher que le plus petit et le plus grand
Posté : 07 nov. 2022, 23:55
par or 1
ce n'est pas dans ce while qu'il faut faire l'echo. dans ce while, on récupère les données, que l'on affiche ensuite.
Re: N'afficher que le plus petit et le plus grand
Posté : 08 nov. 2022, 00:05
par philippeTB
Bon ben je comprends pas, au final j'ai fais comme tu disais dans ton autre exemple
$DECX = 'SELECT min(year(LADATE)) as mini, max(year(LADATE)) as maxi FROM act_Pdec3 WHERE RELEVEUR="'.$dataZ['RELEVEUR'].'" AND COMMUNE="'.$dataZ['COMMUNE'].'" ORDER BY LADATE';
$resDECX = $KwsConnectBdd->query($DECX);
$afficherD=mysqli_fetch_assoc($resDECX);
echo "".$afficherD['mini']." à ".$afficherD['maxi']."";
au moins ça fonctionne nickel, je vais juste ajouter une condition que si maxi et mini son = qu'il n'affiche qu'une date sans le "à".
Merci encore de votre aide
Re: N'afficher que le plus petit et le plus grand
Posté : 08 nov. 2022, 00:08
par or 1
while ($row = mysqli_fetch_array($resNAI)) {
$N_date = explode("-",''.$row['LADATE'].'');
$NX_date[] = $N_date[0];
}
var_dump($NX_date);
on peut mixer les 2 approches, s'il n'y a que 3-4 années, alors toutes les afficher, sinon afficher de x à y.
Re: N'afficher que le plus petit et le plus grand
Posté : 08 nov. 2022, 00:47
par philippeTB
while ($row = mysqli_fetch_array($resNAI)) {
$N_date = explode("-",''.$row['LADATE'].'');
$NX_date[] = $N_date[0];
}
var_dump($NX_date);
on peut mixer les 2 approches, s'il n'y a que 3-4 années, alors toutes les afficher, sinon afficher de x à y.
ah je n'ai encore jamais utiliser var_dump, je ne connaissais pas, merci beaucoup j'apprends des choses pour le coup.