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\">&nbsp;&nbsp;Naissances : </td>";
echo "    <td width=\"100\" bgcolor=\"#DDF1F9\">&nbsp;".$nombre_de_NAI." actes</td>";
echo "    <td width=\"80\" bgcolor=\"#DDF1F9\">&nbsp;&nbsp;Ann&eacute;e(s) : </td>";
echo "	  <td width=\"160\" bgcolor=\"#DDF1F9\">&nbsp;";
while ($row = mysqli_fetch_array($resNAI)) {
$N_date = explode("-",''.$row['LADATE'].'');
$NX_date = "".$N_date[0]."&nbsp;&nbsp;";
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]."&nbsp;&nbsp;";
?

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]."&nbsp;&nbsp;";
?
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\">&nbsp;&nbsp;Naissances : </td>";
echo "    <td width=\"100\" bgcolor=\"#DDF1F9\">&nbsp;".$nombre_de_NAI." actes</td>";
echo "    <td width=\"80\" bgcolor=\"#DDF1F9\">&nbsp;&nbsp;Ann&eacute;e(s) : </td>";
echo "	  <td width=\"160\" bgcolor=\"#DDF1F9\">&nbsp;";
while ($row = mysqli_fetch_array($resNAI)) {
$N_date = explode("-",''.$row['LADATE'].'');
echo "".$N_date[0]."&nbsp;";
}
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']." &agrave; ".$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.