每月和每周MySql时间戳查询和比较

时间:2013-11-05 12:36:35

标签: php html mysql sql regex

我有一张桌子,我可以输入申请人的参赛作品。它有一个date_added列,其中type是timestamp,默认值是current_timestamp。我想制作每周和每月的报告,但我无法确定最好的做法。我需要一个sql语句,返回像这样的条目数。

switch($searchby){
case "monthly": $qry = "select * from tblapplicant where date_added > $month"; break;
case "weekly": $qry = "select * from tblapplicant where date_added > $week"; break;
}

$res = mysql_query($select);
$rec_count = mysql_num_rows($res);

echo "There are <font color='red' size='3'>".$rec_count."</font> matching records found.";

我知道这是不正确的,但这是我现在所能想到的。

我想要的另一件事是,我希望它是确切的年月报告..

编辑: 输出应该是: 2013年6月的整个月共有13位申请人。 - 或者每周一次 - 2013年7月第三季度有3名申请人。

2 个答案:

答案 0 :(得分:1)

我建议采用以下方法。首先,使用您的PHP代码确定您的搜索周期开始的日期以及结束后的第二天。例如,如果是2013年9月的月度报告,则您的开始日期为2013-09-01,结束日期为2013-10-01。然后你只需要一个查询。

 where date_added >= $startdate
 and date_added < $enddate

这种方法的主要好处是:

  1. 处理时间戳字段的时间部分。
  2. 您的查询将合理快速地运行,特别是如果对date_added编制索引。
  3. 使用应用程序代码比使用sql
  4. 更容易理解programmnig逻辑
  5. 您可以将查询编写为存储过程,以使其更快。

答案 1 :(得分:0)

这可以是你的sql语句

select * from tblapplicant where month(date_added) > $month
select * from tblapplicant where DAYOFWEEK(date_added) = X

您应该将X替换为您的工作日1 =星期日,2 =星期一,...,7 =星期六