我有一个表,其中包含带有日期列的数据。需要Mysql查询帮助!

时间:2010-12-29 21:41:41

标签: php sql mysql select date

现在,我在我的列中使用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'];

2 个答案:

答案 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,将整数转换为实际时间戳。这应该使您能够比较实际日期而不仅仅是整数。