Afficher une liste en fonction de l'année.

Fermé
Neodcb - 2 mars 2014 à 13:01
Neodcb77 Messages postés 9 Date d'inscription dimanche 2 mars 2014 Statut Membre Dernière intervention 9 mars 2014 - 9 mars 2014 à 22:49
Bonjour,

sachant que j'ai créé des dossiers en <-...,2010, 2011,... -> 2014
comprendre par dossier un ligne sql avec id, num_dossier, date_deffet, etc....
date_deffet = date activation et que date_deffet est sous le format 2013-12-31

J'aimerais afficher une liste comme ceci:

Nbr de dossier activées en 2010: 12
Nbr de dossier activées en 2012: 25
Nbr de dossier activées en 2013: 215
Nbr de dossier activées en 2014: 158

attention il y a pas eu de dossier en 2011 donc la liste doit pas afficher : (Nbr de dossier activées en 2011)

voici un début de code mais surement pas complet et non fonctionnel, je comprend pas comment mettre date_deffet pour qu'il ne prenne que les dossier en 2013

ensuite comment créer la liste automatique pour chaque année, a moins que je prend le problème à l'envers ???

<?php
$requete=mysql_query("SELECT * FROM gestion_assur_vehicule WHERE date_deffet = '2013'" ) or die ("Requete impossible" );
$nbre_msg=mysql_num_rows($requete);
echo($nbre_msg);
?>


Merci d'avance pour votre aide.

8 réponses

flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
4 mars 2014 à 13:28
Si ta colonne 'date_effet' est du type date, datetime ou timestamp, il te suffit de faire ta requête comme suit :

SELECT YEAR(date_effet) AS annee, COUNT(*) AS nb_dossiers FROM gestion_assur_vehicule GROUP BY annee;
0
Neodcb77 Messages postés 9 Date d'inscription dimanche 2 mars 2014 Statut Membre Dernière intervention 9 mars 2014
4 mars 2014 à 21:24
Non la date n'est pas du type date. mais je vais vous faire un tableau:

ID num_dossier date_effet date_résiliation

1 254 2004-12-31 2007-01-10
2 642 2005-05-07 2007-01-20
3 123 2004-03-10 2006-05-20
4 645 2006-03-10 2008-01-01
5 310 2007-01-20 2009-02-01

donc la requête en français serait:

lister par année le nombre de dossier actif: pour le tableau ci dessus cela devrais donner:

2004 = 2 lien_vers_page.php qui vas afficher la liste des deux dossier de 2004
2005 = 3 lien_vers_page.php qui vas afficher la liste des deux dossier de 2005
2006 = 4 lien_vers_page.php qui vas afficher la liste des deux dossier de 2006
2007 = 4 lien_vers_page.php qui vas afficher la liste des deux dossier de 2007
2008 = 2 lien_vers_page.php qui vas afficher la liste des deux dossier de 2008
2009 = 1 lien_vers_page.php qui vas afficher la liste des deux dossier de 2009


et la requête qui afficherais tout les dossier de 2004 svp pour ma page qui vas afficher la liste des dossier en fonction de l'année.

Je vous remercie d'avance.
0
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
5 mars 2014 à 10:22
Et elle est de quel type, la date ? Il serait peut-être judicieux de la passer dans un type adéquat... Ne serait-ce que pour pouvoir utiliser les fonctions de date, et notamment en l'occurrence la fonction YEAR() qui est tout indiquée. Sinon tu peux faire la même chose avec un LEFT(date_effet, 4), mais c'est un peu bête...
0
Jean_Jacques Messages postés 1040 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 1 août 2014 110
Modifié par Jean_Jacques le 5/03/2014 à 16:21
Bonjour,


Un select distinct devrait pouvoir faire l'affaire ....?

://sql.sh/cours/distinct


Cordialement
0
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
5 mars 2014 à 17:08
Un select distinct élimera les doublons au niveau des dates en elles-mêmes, et non des années.
0
Jean_Jacques Messages postés 1040 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 1 août 2014 110
5 mars 2014 à 17:35
C'est juste !
Et je pressens que ton LEFT(date_effet, ) pourrait bien trouver à s'employer ...
0
Neodcb77 Messages postés 9 Date d'inscription dimanche 2 mars 2014 Statut Membre Dernière intervention 9 mars 2014
5 mars 2014 à 17:48
flokocha ma date est de type varchar(300) et je ne sais pas la modifier car le code de beaucoup de page est déjà poser sur cette conception. (je sais ça me limite énormément)

Jean_Jacques : J'ai pas trop compris. désolé je suis un débutant qui apprend chaque jour.

Voila ce que j'ai pu composer:
$select = "select * from gestion_dos_client where date_effet between '2004-01-01' and '2004-12-31') and ( date_resiliation between '2004-01-01' and '2004-12-31')";

qui affiche une erreur:
Erreur : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') and ( date_resiliation between '2004-01-01' and '2004-12-31')' at line 1

je pense que c'est du au fait que je lui demande deux condition en meme temps avec "and". Comment faire ?
0
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
5 mars 2014 à 17:54
On en revient toujours au même problème : tu ne peux pas utiliser "between ... and ..." avec une colonne de type varchar. Comment veux tu que mysql sache qu'une chaine de caractères est située entre deux autres ? Pour mysql, c'est comme si tu demandais si "chien" est compris entre "poule" et "chat". :)

D'où l'intérêt de travailler avec des dates... Mais si tu tiens absolument à rester sur du varchar, tu peux toujours faire ceci :

SELECT LEFT(date_effet, 4) AS annee, COUNT(*) AS nb_dossiers FROM gestion_assur_vehicule GROUP BY annee;
0
Neodcb77 Messages postés 9 Date d'inscription dimanche 2 mars 2014 Statut Membre Dernière intervention 9 mars 2014
5 mars 2014 à 18:30
heuu.... je vois pas comment la placer ou l'écrire complétement.

si j'ai bien compris ceci:
$select = "select * from gestion_assur_prevoyance where date_effet between '2004-01-01' and '2004-12-31' and date_resiliation between '2004-01-01' and '2004-12-31'";

tu le modifie et fait ceci ? :
$select = "SELECT LEFT(date_effet, 4) AS annee, COUNT(*) AS nb_dossiers FROM gestion_assur_vehicule GROUP BY annee";
0
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
5 mars 2014 à 18:42
Oui mais ça t'affichera par contre le nombre de dossiers par année, et pas une liste de ceux-ci. C'est ce que tu demandes dans ton premier post.
0
Neodcb77 Messages postés 9 Date d'inscription dimanche 2 mars 2014 Statut Membre Dernière intervention 9 mars 2014
5 mars 2014 à 19:14
voici mon code complet





<table cellpadding="0" cellspacing="0">
<tr>
<td width="990" height="224" align="left" valign="top" colspan="3">
<table class="cadre" width="100%" bgcolor="#FFFFCC">
<tr>
<td width="986">
<p><b><span style="font-size:11pt;"> RESULTAT DE LA RECHERCHE: FIN DE CONTRAT VEHICULE DANS MOIN DE 60 JOURS</span></b></p>
</td>
</tr>
<tr>
<td width="986" height="290" align="left" valign="top">
<div style="width:986px; height:610px; background-color:rgb(255,255,255); overflow:auto; border:solid 1px black;">



<?php

$limite=$_GET['limite'];
$nombre = 20; // on va afficher 5 résultats par page.
if (!isset($limite)) $limite = 0; // si on arrive sur la page pour la première fois
// on met limite à 0.

$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts['basename'];





$limitesuivante = $limite + $nombre;
$limiteprecedente = $limite - $nombre;


function displayNextPreviousButtons($limite,$total,$nombre,$page) {
$limitesuivante = $limite + $nombre;
$limiteprecedente = $limite - $nombre;
echo '<table><tr>'."\n";
if($limite != 0) {
echo '<td valign="top">'."\n";
echo '<form action="'.$page.'" method="post">'."\n";
echo '<input type="submit" value="précédents">'."\n";
echo '<input type="hidden" value="'.$limiteprecedente.'" name="limite">'."\n";
echo '</form>'."\n";
echo '</td>'."\n";
}
if($limiteSuivante < $total) {
echo '<td valign="top">'."\n";
echo '<form action="'.$page.'" method="post">'."\n";
echo '<input type="submit" value="suivants">'."\n";
echo '<input type="hidden" value="'.$limitesuivante.'" name="limite">'."\n";
echo '</form>'."\n";
echo '</td>'."\n";

}
echo '</tr></table>'."\n";
}

function affichePages($nombre,$page,$total) {
$nbpages=ceil($total/$nombre);
$numeroPages = 1;
$compteurPages = 1;
$limite = 0;
//echo '<table border = "0" ><tr>'."\n";
while($numeroPages <= $nbpages) {
// echo '<td ><a href = "'.$page.'?limite='.$limite.'">'.$numeroPages.'/'.$nbpages.'</a></td>'."\n";
$limite = $limite + $nombre;
$numeroPages = $numeroPages + 1;
$compteurPages = $compteurPages + 1;
if($compteurPages == 20) {
$compteurPages = 1;
echo ''."\n";
}
}
// echo '</tr></table>'."\n";
echo ''.$nbpages.'';
}



//$select = "SELECT count(id) FROM gestion_assur_vehicule WHERE validite_contrat='En cours' AND NOW() BETWEEN DATE_ADD(date_deffet, INTERVAL 305 DAY) AND DATE_ADD(date_deffet, INTERVAL 368 DAY)";
//$select = "SELECT count(id) FROM gestion_assur_vehicule WHERE validite_contrat='En cours' AND DATE_FORMAT(date_deffet, '%m-%d') > DATE_FORMAT(NOW(), '%m-%d') AND DATE_FORMAT(date_deffet, '%m-%d') < DATE_FORMAT(NOW() + INTERVAL 60 DAY, '%m-%d')";



//$select = "select * from gestion_assur_prevoyance where date_effet between '2004-01-01' and '2004-12-31' and date_resiliation between '2004-01-01' and '2004-12-31'";

//SELECT LEFT(date_effet, 4) AS annee, COUNT(*) AS nb_dossiers FROM gestion_assur_vehicule GROUP BY annee;

$select = "SELECT LEFT(date_effet, 4) AS annee, COUNT(*) AS nb_dossiers FROM gestion_assur_vehicule GROUP BY annee;";



$result = mysql_query($select,$db) or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0];


//$select = "select * FROM gestion_assur_vehicule WHERE validite_contrat='En cours' AND NOW() BETWEEN DATE_ADD(date_deffet, INTERVAL 305 DAY) AND DATE_ADD(date_deffet, INTERVAL 368 DAY) ORDER BY id ASC limit $limite,$nombre";
//$select = "SELECT * FROM gestion_assur_vehicule WHERE validite_contrat='En cours' AND DATE_FORMAT(date_deffet, '%m-%d') > DATE_FORMAT(NOW(), '%m-%d') AND DATE_FORMAT(date_deffet, '%m-%d') < DATE_FORMAT(NOW() + INTERVAL 60 DAY, '%m-%d') ORDER BY DATE_FORMAT(date_deffet, '%m-%d') ASC limit $limite,$nombre";

$select = "select * from gestion_assur_prevoyance where date_effet between '2004-01-01' and '2004-12-31' and date_resiliation between '2004-01-01' and '2004-12-31' ORDER BY DATE_FORMAT(date_deffet, '%m-%d') ASC limit $limite,$nombre";



$result = mysql_query($select,$db) or die ('Erreur : '.mysql_error() );

function CompteReboursAvant($evenement)
{
$evenement = explode('-', $evenement);
// secondes entre le 1er janv. 1970 et la date de l'evenement
$evenement = (mktime(23,59,59,$evenement[1],$evenement[0],$evenement[2]));
// secondes entre le 1er janv. 1970 et aujourd'hui
$aujourdhui = time(void);
// secondes entre aujourd'hui et l'evenement
$secondes = $evenement - $aujourdhui;
// on divise pour avoir en jour(s)
$jours = $secondes / 86400;
// on arrondi à l'entier inferieur
$jours = floor($jours);
// valeur de retour de la fonction
return $jours;
}


if($total) {
// début du tableau
echo '<table bgcolor="#FFFFFF" border="1" width="986">'."\n";
// première ligne on affiche les titres prénom et surnom dans 2 colonnes
echo '<tr>';
echo '<td width="12"><p> </p></td>';
echo '<td width="190" bgcolor="#FFCC66"><b>N° de dossier client:</b></td>';
echo '<td width="80" bgcolor="#FFCC66"><p><b>Type</b></p></td>';
echo '<td width="340" bgcolor="#FFCC66"><p><b>Marque véhicule et modele</b></p></td>';
echo '<td bgcolor="#FFCC66"><p><b>Nbr de j restant</b></p></td>';
echo '<td align="right" bgcolor="#FFCC66"><p><b>Date de debut</b></p></td>';
echo '<td align="right" bgcolor="#FFCC66"><p><b>Vali Contr</b></p></td>';
echo '<td width="10"><p> </p></td>';
echo '</tr>'."\n";
// lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.
while($row = mysql_fetch_array($result)) {
echo '<tr>';
echo '<td width="12"><p> </p></td>';
echo '<td width="190"><a href="fiche_assur_vehicule.php?id='.$row['num_dos_client'].'&asa='.$row['id'].'"><b>N° dos assurance: '.$row['id'].'</b></a></td>';
echo '<td width="80"><p>'.$row['type_vehicule'].'</p></td>';
echo '<td width="340"><p>'.$row['marque_vehicule'].' '.$row['modele_vehicule'].'</p></td>';

$anaumoinun = date("Y", strtotime("-1 year"));
$event_dates = date("d-m-$anaumoinun", strtotime($row['date_deffet']));
$event_datess = date("d-m-Y", strtotime($event_dates));
$event_date = date("d-m-Y", strtotime("+1 year", strtotime($event_datess."-01" )));
//echo $event_date; afiche la date a l'endroit
$nbre_de_jours = CompteReboursAvant($event_date);

echo '<td><p><i>Il reste '.$nbre_de_jours.' jour(s)</i></p></td>';
echo '<td align="right"><p>'.$row['date_deffet'].'</p></td>';
echo '<td align="right"><p>'.$row['validite_contrat'].'</p></td>';
echo '<td width="10"><p> </p></td>';
echo '</tr>'."\n";
}
echo '</table>'."\n";












if($total > $nombre) {
?><p align="center"><?php
if($limite != 0) {
echo '<a href="'.$page.'?limite='.$limiteprecedente.'">Page précédente</a> - ';
}
else
{
echo 'Page précédente - ';
}

// affichage des liens vers les pages
$resa = $limite + $nombre;
$resb = $resa / $nombre;
echo 'page '.$resb.' / ';
affichePages($nombre,$page,$total);

// affichage des boutons


if($limitesuivante < $total) {
echo ' - <a href="'.$page.'?limite='.$limitesuivante.'">Page Suivante</a>';
}
else
{
echo ' - Page Suivante';
}
?></p><?php
}





// fin du tableau.
}
else echo 'Pas d\'enregistrements dans cette table...';

// on libère le résultat
mysql_free_result($result);
?>






</div>
</td>
</tr>
</table>
</td>
</tr>
</table>


</code>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Neodcb77 Messages postés 9 Date d'inscription dimanche 2 mars 2014 Statut Membre Dernière intervention 9 mars 2014
5 mars 2014 à 17:54
j'ai modifier le code:

$select = "select * from gestion_dos_client where date_effet between '2004-01-01' and '2004-12-31' and date_resiliation between '2004-01-01' and '2004-12-31'";

reponse:
Erreur : Unknown column 'date_deffet' in 'order clause'
0
Neodcb77 Messages postés 9 Date d'inscription dimanche 2 mars 2014 Statut Membre Dernière intervention 9 mars 2014
9 mars 2014 à 10:05
Bon j'ai créé ceci: mais n'affiche que les dossier avec la date annuel d'effet 2004
mais comment lui dire si par exemple un dossier a comme date effet 2003-06-01 et date résiliation 2009-06-01 donc dois être compté dans les année 2003, 2004, 2005, 2006, 2007, 2008, 2009 donc dan la liste dois être aussi compté



$select = "SELECT count(id) FROM gestion_assur_prevoyance WHERE LEFT(date_effet, 4) = 2004";



$result = mysql_query($select,$db) or die ('Erreur : '.mysql_error() );

$row = mysql_fetch_row($result);

$total = $row[0];




$select = "select * FROM gestion_assur_prevoyance WHERE LEFT(date_effet, 4) = 2004 ORDER BY id ASC limit $limite,$nombre";

$result = mysql_query($select,$db) or die ('Erreur : '.mysql_error() );
0
jee pee Messages postés 35929 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 4 octobre 2022 8 829
Modifié par jee pee le 9/03/2014 à 11:20
Salut,

Peut être

select   LEFT(date_effet, 4), count(*) FROM gestion_assur_prevoyance 
GROUP BY LEFT(date_effet, 4)


Pour ton problème de gestion de l'intervalle date début/fin on revient à la remarque qui t'a été faite plusieurs fois, il faut utiliser des champs de type date qui possèdent des opérateurs spécialisés.


cdlt
        Un étranger, c'est un ami qu'on n'a pas encore rencontré.
0
Neodcb77 Messages postés 9 Date d'inscription dimanche 2 mars 2014 Statut Membre Dernière intervention 9 mars 2014
9 mars 2014 à 22:49
je ne peux pas modifier en type date car d'autre fonction sont calculer en mode varchar dessus
0