2014-09-11 5 views
0

Comment puis-je obtenir une mise à jour un autre champ (colonne entière) la différence de temps en format (TIME 0:00:00) dans ma base de données MYSQL phpMyAdmindifférence de temps MYSQL PHP

<?php 
    $con=mysqli_connect("***","****","****","******"); 
    // Check connection 
    if (mysqli_connect_errno()) { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 
    mysqli_query($con,"UPDATE members SET time_on = current_time-logon_time"); 
?> 

Je continue à recevoir 0 : 00: 00 et pas de résultats quand je le fais en PHP. Les autres fois notre amende, juste essayer de faire la différence et mettre à jour tous les champs dans la colonne time_on.

+0

Vous pouvez trouver la réponse de votre question ici, il est résolu en php http://stackoverflow.com/questions/13928021/getting-time-difference-between-two-times-in-php – Bira

Répondre

0

Vous devez utiliser timediff()

mysqli_query($con,"UPDATE members SET time_on = timediff(current_time,logon_time)"); 
+0

remercie l'homme que travaillé bien l'apprécier – user2498276

0

Vous pouvez utiliser TIMESTAMPDIFF() pour obtenir la différence entre deux dates et/ou datetimes. Essayez ceci:

UPDATE members 
SET time_on = TIMESTAMPDIFF(SECOND, logon_time, current_time) 

Cela va régler la différence en quelques secondes.

0

Juste pour étendre pourquoi les autres réponses sont justes: Vous faites MATH fois, ce qui ne fonctionne pas comme prévu:

mysql> create table foo (x time, y time); 
Query OK, 0 rows affected (0.01 sec) 

mysql> insert into foo (x, y) values ('14:15:16', '09:08:07'); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from foo; 
+----------+----------+ 
| x  | y  | 
+----------+----------+ 
| 14:15:16 | 09:08:07 | 
+----------+----------+ 
1 row in set (0.00 sec) 

mysql> select x - y from foo; 
+-------+ 
| x - y | 
+-------+ 
| 50709 | 
+-------+ 
1 row in set (0.00 sec) 

Notez comment le résultat est pas une valeur de temps , c'est un nombre entier. Il se trouve être une conversion directe time-> string-> numérique de 05:07:09, qui est la différence de temps littérale comme prévu des deux valeurs. Mais puisque vous faites MATH, c'est-à-dire la soustraction, MySQL suppose que vous voulez une réponse numérique et vous la donne.

C'est pourquoi il existe timediff() et des fonctions de date/heure similaires, qui renvoient une valeur date/heure réelle, pas ce nombre entier inutile/bancal.

Questions connexes