1

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

我的专栏看起来像这样:

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

但是,这不起作用。有什么建议吗?

4

3 回答 3

5

我会放弃使用 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 字段,然后您可以将此查询更改为 simple WHERE datetime > NOW(),但这完全取决于您。只是一直发现 MySQL 日期处理比 PHP 更合乎逻辑。

于 2013-03-27T15:13:20.257 回答
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
于 2013-03-27T15:16:03.133 回答
0

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

SELECT * FROM table WHERE (date>$now) and (time>$now) ORDER BY date,time LIMIT 1
于 2013-03-27T15:11:24.810 回答