soustraction des valeurs d'un champ

Eléphanteau du PHP | 13 Messages

18 févr. 2015, 16:37

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.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

19 févr. 2015, 03:11

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)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 13 Messages

19 févr. 2015, 10:29

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.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

19 févr. 2015, 16:42

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
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 13 Messages

22 févr. 2015, 14:59

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

22 févr. 2015, 20:37

Dans ton exemple, à quoi correspondent 147, 188 et 255 ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 13 Messages

23 févr. 2015, 09:39

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.

Eléphanteau du PHP | 13 Messages

23 févr. 2015, 17:17

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.

Mammouth du PHP | 688 Messages

23 févr. 2015, 18:29

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);

Eléphanteau du PHP | 13 Messages

24 févr. 2015, 09:46

Merci tof73 ;
Je vais essayer le code que tu m'a donné et je vais te rendre la réponse.