Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据time now从PHP中的DB中获取下一次(以VARCHAR为单位)_Php_Mysql_Time_Next - Fatal编程技术网

根据time now从PHP中的DB中获取下一次(以VARCHAR为单位)

根据time now从PHP中的DB中获取下一次(以VARCHAR为单位),php,mysql,time,next,Php,Mysql,Time,Next,我有一个mysql表,上面有火车时刻表 Type (INT) | time_start | time_stop 1 | 09:31:00 | 09:34:00 1 | 09:43:00 | 09:47:00 1 | 09:55:00 | 09:58:00 1 | 10:07:00 | 10:10:00 1 | 10:33:00 | 10:36:00 1 | 10:45

我有一个mysql表,上面有火车时刻表

Type (INT) | time_start | time_stop
  1        |  09:31:00  | 09:34:00
  1        |  09:43:00  | 09:47:00
  1        |  09:55:00  | 09:58:00
  1        |  10:07:00  | 10:10:00
  1        |  10:33:00  | 10:36:00
  1        |  10:45:00  | 10:47:00
  1        |  10:57:00  | 11:00:00
  1        |  11:12:00  | 11:15:00
  1        |  11:35:00  | 11:38:00
(而且还在继续……) -“类型”是时间表类型,因为它在冬季、夏季等发生变化。 -“type”是INT,“time\u start”和“time\u stop”是VARCHAR(8)

我想知道根据现在的时间,最有效的方法是获得下6次“火车时间”。 想象一下,现在是09:33:10,我想得到的是:

  1        |  09:43:00  | 09:47:00
  1        |  09:55:00  | 09:58:00
  1        |  10:07:00  | 10:10:00
  1        |  10:33:00  | 10:36:00
  1        |  10:45:00  | 10:47:00
  1        |  10:57:00  | 11:00:00
如果mysql表中有任何更改,我也愿意接受您的想法。 提前感谢;)


Miguel.

您只需将VARCHAR类型更改为TIME类型,并执行如下SQL请求
选择*FROM time\u start>NOW()

基本方法如下:

select *
from timetables tt
where tt.time_start > current time
order by tt.time_start
limit 6
这方面有两个挑战。第一个是午夜。据推测,如果时间是在晚上晚些时候,那么你也希望在清晨乘坐火车。第二个是将时间转换为正确的格式

select *
from timetable tt
order by (t.time_start > time(now()) desc,
         tt.time_start
limit 6
诀窍是将
where
条件移动到
排序子句中。实际上,这将在当前时间开始订购,并在午夜后继续订购。这允许您选择带有包装的六个

time()

SELECT * FROM table_name
WHERE time_start >=time(now()) 
LIMIT 6

只需将搜索时间转换为整数:

$char_time = '09:33:10';
$int_time = (int) str_replace(':','', $char_time);
然后像这样构造sql:

$sql = "SELECT *, CAST(REPLACE(time_start, ',', '') AS INT) as mytime 
        FROM yourtable WHERE  mytime > $int_time
        ORDER BY mytime LIMIT 6";

基本上,我们上面所做的就是将您的
varchar
时间字段转换为
int
类型,并使用该类型进行比较,如果您不能将数据库字段更改为
time
类型,这是一个很好的解决方案。

我将该类型更改为time,并且它起到了作用,因此我甚至没有尝试此操作,但无论如何都要感谢@米盖尔桑托斯。即使下一班火车是第二天,它也能工作吗?