如何将时间存储为天跨度..as整数?

时间:2018-07-18 05:39:11

标签: php mysql

我的表格结构如下:。列SrNo Arrival_Time和Day。我想要以下模式中的Day列为所需输出...如何存储?使用mysql查询或php代码段...?日期值应为整数格式。任何帮助将不胜感激。 预先感谢。

CREATE TABLE `travel_time` (
  `id` int(11) NOT NULL auto_increment,
  `SrNo` int(3) default NULL,
  `Arrival_Time` time default NULL,
  `Day` int(1) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=61 ;

--
-- Dumping data for table `travel_time`
--

INSERT INTO `travel_time` (`id`, `SrNo`, `Arrival_Time`, `Day`) VALUES
(1, 1, '18:25:00', 1),
(2, 2, '19:50:00', 1),
(3, 3, '21:22:00', 1),
(4, 4, '22:23:00', 1),
(5, 5, '23:18:00', 1),
(6, 6, '00:30:00', 2),
(7, 7, '02:38:00', 2),
(8, 8, '03:20:00', 2),
(9, 9, '04:13:00', 2),
(10, 10, '04:53:00', 2),
(11, 11, '05:20:00', 2),
(12, 12, '06:55:00', 2),
(13, 13, '08:37:00', 2),
(14, 14, '10:10:00', 2),
(15, 15, '11:05:00', 2),
(16, 16, '11:22:00', 2),
(17, 17, '12:06:00', 2),
(18, 18, '13:22:00', 2),
(19, 19, '14:03:00', 2),
(20, 20, '14:40:00', 2),
(21, 21, '16:30:00', 2),
(22, 22, '17:28:00', 2),
(23, 23, '18:20:00', 2),
(24, 24, '19:15:00', 2),
(25, 25, '20:00:00', 2),
(26, 26, '21:18:00', 2),
(27, 27, '22:53:00', 2),
(28, 28, '23:51:00', 2),
(29, 29, '01:52:00', 3),
(30, 30, '04:10:00', 3),
(31, 1, '21:50:00', 1),
(32, 2, '23:30:00', 1),
(33, 3, '01:25:00', 2),
(34, 4, '02:27:00', 2),
(35, 5, '03:55:00', 2),
(36, 6, '05:45:00', 2),
(37, 7, '05:55:00', 2),
(38, 8, '06:43:00', 2),
(39, 9, '07:43:00', 2),
(40, 10, '09:00:00', 2),
(41, 11, '10:45:00', 2),
(42, 12, '11:40:00', 2),
(43, 13, '12:06:00', 2),
(44, 14, '13:37:00', 2),
(45, 15, '14:13:00', 2),
(46, 16, '14:29:00', 2),
(47, 17, '15:40:00', 2),
(48, 18, '16:43:00', 2),
(49, 19, '18:22:00', 2),
(50, 20, '19:22:00', 2),
(51, 21, '19:49:00', 2),
(52, 22, '20:24:00', 2),
(53, 23, '21:20:00', 2),
(54, 24, '21:53:00', 2),
(55, 25, '23:50:00', 2),
(56, 26, '01:13:00', 3),
(57, 27, '02:08:00', 3),
(58, 28, '03:27:00', 3),
(59, 29, '05:05:00', 3),
(60, 30, '06:50:00', 3);

2 个答案:

答案 0 :(得分:2)

经过大约45分钟的工作,我设法使查询开始工作。在这里:

SELECT id, SrNo, Arrival_Time,
    @day := if(m2 = 1, 1, if(m1 = 1, @day + 1, @day)) AS Day
FROM
(
    SELECT
        t1.id,
        t1.SrNo,
        t1.Arrival_Time,
        CASE WHEN t1.Arrival_time < t2.Arrival_time THEN 1 ELSE 0 END AS m1,
        CASE WHEN t1.SrNo < t2.SrNo THEN 1 ELSE 0 END AS m2
    FROM travel_time t1
    LEFT JOIN travel_time t2
        ON t1.id = t2.id + 1
) t1, (SELECT @day:=1) AS t
ORDER BY id;

Demo

内部查询(别名为t1)选择所有数据列以及两个标记m1m2m1标记会跟踪我们是否已滚动到新的一天,在这种情况下,需要将一天增加一天。 m2标记跟踪我们是否重置了SrNo序列,在这种情况下,日期也需要重置为1。

汲取的重要教训:在尝试使用用户变量进行迭代之前,我们必须首先实现自连接 。没有t1子查询技巧,我的解决方案一直失败。查看下面的演示以查看实际操作。

编辑:

如果您需要一个包含该数据的实际表,那​​么我建议对查询使用INSERT INTO ... SELECT

INSERT INTO travel_time_new (id, SrNo, Arrival_Time, Day)
SELECT ...    -- my query from above

这需要创建一个名为travel_time_new的新表,该表还包含当天的新列。然后,您可以删除原始的travel_time表,然后将新表重命名为旧表。

我建议这样做是因为要使用我的答案更新当前表,就需要加入我的查询,并且在使用用户变量时可能会有一些警告。

答案 1 :(得分:0)

根据这个问题:how to calculate travel time using source and destination times?  我认为您需要一个PHP脚本。

我写了一个代码,您可以设置时间并运行脚本,然后将您设置的时间插入到表中。 这段代码无法识别时间是否已过23:59,因为它将破坏表格,因为表格中仅剩23:51,并且可以正常工作!该代码仅检查输入时间是在表中最后输入的时间之后还是之前,然后更改日期。

我希望这是您要查找的代码:

<?php
$insertTime="07:10";
//Connect to Database
$conn=new mysqli($dbhost,$dbuser,$dbpass,$dbname);
if (!$conn) {
die("Error Connecting To Database: ".mysqli_connect_error()."<br/>");
}
$readlastdate="SELECT * FROM travel_time  ORDER BY `travel_time`.`id` DESC";
$readresult=mysqli_query($conn,$readlastdate);
while ($row=mysqli_fetch_assoc($readresult)) {
$time=date("H:i:s",strtotime($row['Arrival_Time']));
$readDay=$row['Day'];
$TimeToInsert=date("H:i:s",strtotime($insertTime));

if ($TimeToInsert < $time) {
    $insertday=$readDay+1;
        $sql="
        INSERT INTO travel_time (`SrNo`,`Arrival_Time`,`Day`)
        VALUES ('".($row['SrNo']+1)."','".$TimeToInsert."','".$insertday."' )
        ";
        if (mysqli_query($conn,$sql)) {
            break;
        }else{echo mysqli_error($conn)."<br/>";}
}else{
    $elsesql="INSERT INTO travel_time (`SrNo`,`Arrival_Time`,`Day`)
    VALUES ('".($row['SrNo']+1)."','".$TimeToInsert."','".$readDay."' )
    ";
}
}
?>

我希望这对您有帮助

P.S:编辑数据库信息