显示最接近当前日期的结果&时间(MySQL和PHP)

时间:2013-03-27 15:06:17

标签: php mysql date

我正在尝试进行查询,但经过几个小时的尝试,我似乎无法做到正确。我想要做的是从最接近当前日期和数据库的数据库中显示一件事。时间和当前日期之后&时间。

我的列看起来像这样:

  date         time
1364399654     15:00
1364684400     16:00
1367272800     12:00

我的PHP看起来像这样:

$timestamp_now = strtotime(date('d-m-Y')); //Creates a timestamp of the currect date
$time_now = date('H:i');
$sql = mysql_query('SELECT * FROM table_name ORDER BY date ASC, time ASC (WHERE date > '.$timestamp_now.') AND (time > "'.$time_now.'") LIMIT 1') or die(mysql_error());
$data = mysql_fetch_array($sql);

然而,这不起作用。有任何建议吗?

3 个答案:

答案 0 :(得分:4)

我会放弃使用PHP日期/时间方法并依赖MySQL提供类似

的查询
SELECT * FROM table_name 
WHERE date > CURRENT_DATE
OR (
    date = CURRENT_DATE
    AND 
    time > CURRENT_TIME
)
ORDER BY date ASC, time ASC LIMIT 1

OR确保它获得正确的记录,否则TIME部分将阻止,即如果当前时间是06:00,则出现在第二天03:00的结果

我看到你在那里使用时间戳值,所以你总是可以传入PHP日期数字来代替CURRENT_DATE。这将给出最终的

脚本
$timestamp_now = strtotime(date('d-m-Y')); //Creates a timestamp of the currect date
$sql = mysql_query('SELECT * FROM table_name 
                    WHERE date > '.$timestamp_now.'
                    OR (
                        date = '.$timestamp_now.'
                        AND 
                        time > CURRENT_TIME
                    )
                    ORDER BY date ASC, time ASC LIMIT 1') or die(mysql_error());
$data = mysql_fetch_array($sql);

我建议考虑更改数据库,如果可能的话,将其存储为MySQL DATETIME字段,因为您可以将此查询更改为WHERE datetime > NOW(),但这完全取决于您。只是总是发现MySQL日期处理比PHP更合乎逻辑。

答案 1 :(得分:1)

您应该再使用一次测试:

  • DATE(date) > CURDATE():如果是明天或以后
  • DATE(date) = CURDATE() AND time > TIME(NOW()):它是今天,但稍后

完整代码:

$sql = mysql_query('SELECT * 
                    FROM table_name 
                    WHERE DATE(date) > CURDATE()
                    OR (DATE(date) = CURDATE() AND time > TIME(NOW()))
                    ORDER BY date ASC, time ASC 
                    LIMIT 1'
                  ) or die(mysql_error());
$data = mysql_fetch_array($sql);

请注意您在date字段中使用时间戳。时间戳包含日期时间,因此您可以使用此请求:

SELECT * 
FROM table_name 
WHERE date > NOW()
ORDER BY date ASC
LIMIT 1

答案 2 :(得分:0)

我相信您需要在ORDER BY之前使用WHERE获取SQL结构

之类的东西
SELECT * FROM table WHERE (date>$now) and (time>$now) ORDER BY date,time LIMIT 1