现在,我在我的列中使用php timestamp(time())作为时间戳。我使用它是因为我认为将它存储为整数将比使用datetime更有效。
现在我在两个时间戳之间选择时间时遇到严重问题。
例如,我试图获取昨天添加的记录(即今天的php时间戳和todaysdate之间的日期 - 在php时间戳中添加24小时)
在sql伪代码中看起来像这样
SELECT * FROM table
WHERE date < phptimestamp(todaysdate) AND date > phptimestamp(todaysdate -24h)
它确实给我一些记录,但由于某种原因,此范围之间的记录继续进行查找。我正在寻找的时间戳是静态的。这些时间戳之间的记录不应该改变,因为添加的所有记录都有一个时间戳。
真实代码
$date = getdate();
$m = time() - (5 * 60);
$h = time() - (($date['minutes'] * 60) + $date['seconds']);
$d = time() - ((60 * 60 * $date['hours']) + ($date['minutes'] * 60) + $date['seconds']);
$y = time() - ((60 * 60 * 24) + ($date['hours'] * 60 * 60) + ($date['minutes'] * 60) + $date['seconds']);
$crawledm = mysql_fetch_assoc(mysql_query("SELECT count(crawled) as count FROM domains WHERE crawled != '' AND crawled > '{$m}'"));
$crawledm = $crawledm['count'];
$crawledh = mysql_fetch_assoc(mysql_query("SELECT count(crawled) as count FROM domains WHERE crawled != '' AND crawled > '{$h}'"));
$crawledh = $crawledh['count'];
$crawledd = mysql_fetch_assoc(mysql_query("SELECT count(crawled) as count FROM domains WHERE crawled != '' AND crawled > '{$d}'"));
$crawledd = $crawledd['count'];
$crawledy = mysql_fetch_assoc(mysql_query("SELECT count(crawled) as count FROM domains WHERE crawled != '' AND crawled > '{$y}' AND crawled < '{$d}'"));
$crawledy = $crawledy['count'];
答案 0 :(得分:2)
我假设你在表中使用TIMESTAMP列类型,而不是UNIX时间戳(只是一个整数)。
没有理由将日期时间存储为整数 - MySQL(以及其他所有dbms)都经过优化,以非常智能的方式处理日期和时间。
假设您将日期存储在日期时间/时间戳列中,您应该能够使用此查询:
SELECT *
FROM `table`
WHERE `date` BETWEEN DATE_SUB(NOW(), INTERVAL 1 DAY) AND NOW()
此外,当您使用MySQL中的日期和时间时,this doc page是您的朋友。
答案 1 :(得分:0)
将phptimestamp替换为FROM_UNIXTIME,将整数转换为实际时间戳。这应该使您能够比较实际日期而不仅仅是整数。