Page 1 sur 1

soustraction des valeurs d'un champ

Posté : 18 févr. 2015, 16:37
par yani65
Bonjour,
Peut_on appliquer la fonction timediff() à toutes les valeurs d'un champs time?
C'est à dire en les prenant deux à deux (temps suivant-temps précédent) ainsi de suite jusqu'à la fin.?
Merci.

Re: soustraction des valeurs d'un champ

Posté : 19 févr. 2015, 03:11
par @rthur
Bonjour,

Directement dans une requête SQL je ne pense pas que ce soit possible, la notion de précédent/suivant étant toute relative.
En revanche en passant par du PHP, c'est pas très compliqué, il "suffit" de boucler sur chaque enregistrement, de stocker le temps courant dans une variable et lors du traitement suivant de faire la différence entre la valeur de l'enregistrement courant et la valeur stockée en variable( càd la valeur de l'enregistrement juste précédent)

Re: soustraction des valeurs d'un champ

Posté : 19 févr. 2015, 10:29
par yani65
Merci @rthur ,
Oui,je sais, je l'ai fait d'ailleurs, mais le problème est que je veux faire cette soustraction pour les enregistrements de ma table Mysql et selon la date , chose que je ne peux pas réaliser avec le code php, c'est pour cette raison que je veux essayer de le faire avec une requête sql genre comme ça:
SELECT TIMEDIFF(minute) AS diff FROM `ma_table` GROUP BY date!!!
voici mon code php:
<?php
				                                             ////////////////////////////////////////
//********************REQUETE DE CALCUL DE NOMBRE D'ENREGISTREMENTS DANS LA TABLE***************************/
				                                             //////////////////////////////////////
include ('connection.php');
$db=mysql_select_db("test");

$sql_cpt= "SELECT COUNT(id) as k FROM mdl_ens1_horaire_copie";
$res_sql_cpt=mysql_query($sql_cpt);
if($res_sql_cpt==FALSE)
{die(mysql_error());
mysql_close();}
$rep_sql_cpt= mysql_fetch_array($res_sql_cpt);
{
mysql_free_result($res_sql_cpt);
$k=$rep_sql_cpt['k'];
echo ' nbr= '.$k.'<br>';

}
				                                              ////////////////////////////////////////
//********************REQUETE DE RECUPERATION DES COORDONNEES DE LA TABLE ***************************/
				                                              ///////////////////////////////////////

$sql_sel= "SELECT date,mois,jour,heure,minute  FROM mdl_ens1_horaire_copie ";
$res_sql_sel=mysql_query($sql_sel) or die(mysql_error());

// Creation du tableau
$tab=array();
while ($line_sql_sel= mysql_fetch_array($res_sql_sel)) {
   
   $date[]=$line_sql_sel["date"];
   $mois[]= $line_sql_sel["mois"];
   $jour[]= $line_sql_sel["jour"];
   $heure[]= $line_sql_sel["heure"];
   $minute[]= $line_sql_sel["minute"];

}
mysql_close();	

/////////////////*******EXECUTION DE LA BOUCLE WHILE ET TEST DE LA CONDITION IF***********////////////////////

    $i=0;
    $j=0;
	while ($i++<$k-1)	
	{
		
///////////////////*******CALCUL DE NOMBRES DE MINUTES TRAVAILLEES************//////////////////////

{$sous[$i]=(($heure[$i+1]*60)+($minute[$i+1]))-(($heure[$i]*60)+($minute[$i]));
echo $sous[$i].'<br>';
$som[$j]=$som[$j]+$sous[$i];
echo $som[$j].'<br>';

}// Fin de CALCUL DE NOMBRES DE MINUTES TRAVAILLEES

}// Fin de 	while ($i++<$k-1)			
?>
Pouvez vous_m'aider à modifier ce code afin qu'il me calcule le nombre de minutes travaillées pour chaque jour.

Re: soustraction des valeurs d'un champ

Posté : 19 févr. 2015, 16:42
par @rthur
Je n'ai pas compris ce que tu cherches à faire.
Peut être qu'avec un exemple ça serait plus simple.

Si tu as dans une table les enregistrements suivants :

Code : Tout sélectionner

A 2015-02-19 12:00:00 B 2015-02-19 13:00:00 C 2015-02-19 15:30:00 D 2015-02-19 20:00:00
Qu'est-ce que tu cherches à obtenir comme résultat ?

je veux faire cette soustraction pour les enregistrements de ma table Mysql et selon la date , chose que je ne peux pas réaliser avec le code php,
Tu as la fonction date_diff() en PHP qui est assez proche de TIMEDIFF en MySQL

Re: soustraction des valeurs d'un champ

Posté : 22 févr. 2015, 14:59
par yani65
Bonjour @rthur ;
Merci pour votre patience , l'exemple que vous m'avez donné ressemble exactement au contenu de ma table, mais il contient les enregistrements d'une seule date qui est:2015-02-19, ma table contient plusieurs dates:
Pour une seule date, j'ai résolu le problème avec le script que je vous ai donné.
Le résultat que je veux obtenir est une autre table qui sera comme ça:

  • date nbr_minutes
    2015-02-01 147
    2015-02-02 188
    2015-02-03 255

Re: soustraction des valeurs d'un champ

Posté : 22 févr. 2015, 20:37
par @rthur
Dans ton exemple, à quoi correspondent 147, 188 et 255 ?

Re: soustraction des valeurs d'un champ

Posté : 23 févr. 2015, 09:39
par yani65
Bonjour;
Ces valeurs correspondent au nombre de minutes travaillées, c'est à dire: 147 correspond au nombre de minutes travaillées le 01-02-2015, 188 correspond au nombre de minutes travaillées le 02-02-2015 et ainsi de suite.

Re: soustraction des valeurs d'un champ

Posté : 23 févr. 2015, 17:17
par yani65
Bonsoir;
voici un exemple d'une table :
date heure minute heure*60+minute difference
2015-02-01 8 3 483 483-0=483
2015-02-01 9 14 554 554-483=71
2015-02-01 10 15 615 615-554=61
2015-02-01 11 20 680 680-615=65
2015-02-01 11 25 685 685-680=5
2015-02-02 8 10 490 490-0=490
2015-02-02 9 13 553 553-490=63
2015-02-02 10 20 620 620-553=67
2015-02-02 11 45 705 705-620=85

et voici le résultat que je dois obtenir à la fin:
date nbr_minute
2015-02-01 (71+61+65+5)=202
2015-02-02 (63+67+85)=215
J'espère que vous comprenez ce que je viens de faire:
Merci beaucoup pour votre patience.

Re: soustraction des valeurs d'un champ

Posté : 23 févr. 2015, 18:29
par tof73
un code du genre, non testé :
$date = "";
$result = array();
$total = 0;
$valprecedente = 0;
foreach($table as $t){
  if($t['date'] != $date){
    if($date != ''){
      $result[$date] = $total;
    }
    $date = $t['date'];
    $total = 0;
    $valprecedente = $t['nb'];  
  }
  else{
    $total += ($t['nb'] - $valprecedente);
    $valprecedente = $t['nb'];  
  }
}
print_r($result);

Re: soustraction des valeurs d'un champ

Posté : 24 févr. 2015, 09:46
par yani65
Merci tof73 ;
Je vais essayer le code que tu m'a donné et je vais te rendre la réponse.