Fonction sql avec retour de valeur mensuelle

Signaler
Messages postés
379
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
8 octobre 2008
-
Messages postés
379
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
8 octobre 2008
-
bonjour,
je cherche a faire une fonction sql en php qui me retournerai le nb de fois qu'apparait une donnée dans une table sur un etendue de mois
cad que g une table avec un id et qq propriété ainsi qu'une date
et je voudrai savoir le nb de fois que figure dans la base de donnée cette propriété en janvier, février, mars ...
je voudrais que sa me donne un truc du style 
janvier : 3 fois,
fevrier : 2 fois, 
mars : 0 fois, 
...
voici pour le moment ma fonction:
==================== 

function requete_date($champ)
{
  $sql1 = "SELECT COUNT(*) FROM histo".
    " WHERE date_fin BETWEEN '$date' AND '$date2' AND $champ ";
  $req1 = mysql_query($sql1) or die(mysql_error());
  if ($data1 = mysql_result($req1,0))
   {
   return $data1['date'];
   }
}

9 réponses

Messages postés
379
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
8 octobre 2008

le fait est que je l utilise deja bcp dans mon script selon different criteres mais je ne parviens pas a le faire comme cela a moins de rappeller la fonction pour chacun des criteres et pour chacun des mois ce ki reviendrai a appeler la fonction
nb de critere * nb de mois
soit par exemple 6 criteres sur 6 mois fait 36 appel ce ki en fait pas mal
il me faudrait un moyen plus simple si c possible
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Salut!
Y'a un champ qui contient le nom du mois? Ou bien une date? En quel format? Quel nom de champ?

Parce que avec GROUP BY et count on doit pouvoir faire qqch! :)

Tu peux nous montrer la structure de ta table?

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
379
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
8 octobre 2008

voila ma table histo
id_historique INT autoincrement
type_inter  VARCHAR
type_mat  VARCHAR
date_début DATE (donc de la forme 0000/00/00)
date_fin DATE
... ( et encore d autre critères)
 et g fais sa aussi pour recup le mois du champ date
 
$date_temp2  = $data['date_début'];
$annee_temp2  = strtok($date_temp2,"-");
$mois_temp2  = strtok("-");
$jour_temp2  = strtok("-");
qui pouurait nous etre utile pour la suite (enfin je pense !!)
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Oki!
Et tu veux compter sur quel champ, je n'ai pas compris (dsl, boolay d'un jour, boolay tjs, ^^)

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
379
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
8 octobre 2008

lol en fait je veux compte le nb de fois qu apparait le critere demandé a sur plusieur mois cad si je ve savoir combien de fois de janvier a mars que installation apparait alors le resultat sera par exemple
janvier : 3
fevrier : 2
mars : 5
avec une requete similaire a sa :
function requete_date($champ)
{
  $sql1 = "SELECT COUNT(*) FROM histo".
    " WHERE date_fin BETWEEN '$date' AND '$date2' AND $champ ";
  $req1 = mysql_query($sql1) or die(mysql_error());
  if ($data1 = mysql_result($req1,0))
   {
   return $data1['id_historique'];
   }
}

$install = requete_date("type_inter='installation'");
echo $install;
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Salut!
Et qqch dans le genre, ça marche?

"SELECT count(id_historique) as nb FROM histo WHERE date_fin BETWEEN '$date' AND '$date2' GROUP BY MONTH(date_fin)"

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
379
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
8 octobre 2008

nan sa ne me donne pas ce ke je voulais mais merci quand mm
g chercher toute la nuit et je suis parvenu a faire ce ke je desirai
++
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Oki... Tu as fait comment?

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
379
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
8 octobre 2008

voila ce que g fait, g tout d abord créer 3 fonctions une pour compter le nb de fois qu'il apparait, une pour déterminer en sec l'interval entre la date de début et la date de fin pour chaque donnée enregistré dans l'historique (pour ma part c des dates d interventions pour calculer la durée d intervention)
et enfin une pour convertir les durées des secondes en mois, jour, heures, minutes
par contre ceci n 'est qu'un extrait car les appels de fonctions sont plus nombreuses mais c exactement sa ce ke g fait

voila les fonctions :
==========
function requete_date($table,$champ)
{
$sql1 = "SELECT COUNT(*) FROM $table ".
  " WHERE $champ ";
$req1 = mysql_query($sql1) or die('E_req_dep_install '.mysql_error());
if ($data1 = mysql_result($req1,0))
 {
 return $data1['date_fin'];
 break;
 }
}



function requete_duree($table,$champ)
{
$sql =  "SELECT * FROM $table WHERE $champ ";
$req = mysql_query($sql) or die (mysql_error());
$i = 0;
while ($data = mysql_fetch_array($req))
 {
 $date_temp2  = $data['date_début'];
 $annee_temp2  = strtok($date_temp2,"-");
 $mois_temp2  = strtok("-");
 $jour_temp2  = strtok("-");
 $heure_temp2  = $data['heure_début'];
 $H_temp2   = strtok($heure_temp2,":");
 $M_temp2   = strtok(":");
 $date_temp1  = $data['date_fin'];
 $anne_temp1  = strtok($date_temp1,"-");
 $mois_temp1  = strtok("-");
 $jour_temp1  = strtok("-");
 $heure_temp1  = $data['heure_fin'];
 $H_temp1   = strtok($heure_temp1,":");
 $M_temp1   = strtok(":");
 $sec = date("U",mktime($H_temp1,$M_temp1,0,$mois_temp1,$jour_temp1,0))- date("U",mktime($H_temp2,$M_temp2,0,$mois_temp2,$jour_temp2,0));
 $sec = str_replace("-","",$sec);
 $i = $i + $sec;
 }
return $i;
break;
}



function convert_date($sec)
{
if($sec<60)
    {$interval="Moins d'1 minute"; }
elseif($sec<3600)
    {$interval=date("i",$sec)."min"; }
elseif($sec<86400)
    {$interval=(date("H",$sec)-1)."h, ".date("i",$sec)."min "; }
elseif($sec<2678400)
    {$interval=(date("d",$sec)-1)."j, ".date("H",$sec) ."h ".date("i",$sec)."min"; }
else
    {$interval=(date("m",$sec)-1) ." mois, ".date("d",$sec)."j "; }
return $interval;
break;
}



ensuite g effectuer mais appel de fonction avec une boucle pour enregister en chacune des variables avec l indice (c similaire a des arrays) indiquant le mois concerné

 for($i=$mois;$i<=$mois2;$i++)
  { $date = $an.'-'.$i.'-01';
   $date2 = $an .'-'.$i.'-31'; 
    $inst[$i] = requete_duree($table_hist, " Installation  AND date_fin BETWEEN '$date' AND '$date2' ");
    $nb_inst[$i] = requete_date($table_hist, " Installation   AND date_fin BETWEEN '$date' AND '$date2' ");
    $instC[$i] = convert_date($inst[$i]).'('.$nb_inst[$i].')';
    
    $dep[$i] = requete_duree($table_hist," Depannage AND date_fin BETWEEN '$date' AND '$date2' ");
    $nb_dep[$i] = requete_date($table_hist," Depannage AND date_fin BETWEEN '$date' AND '$date2' ");
    $depC[$i] = convert_date($dep[$i]).'('.$nb_dep[$i].')';
   }

 pour finir je refais la mm boucle un pe plus loin pour le mettre sous forme de tableau HTML ce qui affichera autant de tableau kil y a de mois pris en compte 

for($i=$mois;$i<=$mois2;$i++)
 { $date = $an.'-'.$i.'-01';
  $date2 = $an.'-'.$i.'-31';
echo''.$i.', ';
echo'----
Installation/Depannage, ';
echo'----
'.$instC[$i].'/'.$depC[$i].', ';
echo'
</td><td>';
 }