我有一个函数可以获取所有新注册的用户,并根据过滤器显示它,无论是按月还是按年新注册。
在这个例子中我使用的是年份,我有这个sql
Select date_registered from users where date_registered > '2011-12-31 12:59:59' AND date_registered < '2013-01-01 12:00:00'
因此,这将导致2012年注册的所有date_registered
问题是如何更具动态性,例如我可以应用过滤器
where date_registered > $dynamic_date and date_registered < $dynamic_date
或任何好的建议如何更好地实现这一点。
谢谢。 。答案 0 :(得分:2)
我相信这就是你要找的东西:
$sql = "SELECT date_registered
FROM users
WHERE YEAR(date_registered) = YEAR(NOW())";
既然你也想要正确的一周,也要看一下函数YEARWEEK()
。它的工作方式相同,并返回周数。 See here
答案 1 :(得分:1)
试试这段代码
$sql = "SELECT date_registered FROM users WHERE date_registered > '$dateStart' AND date_registered < '$dateEnd'";
其中$dateStart
和$dateEnd
是您的动态日期变量
变量周围的一对SINGLE引号应该足够了。如您所见,所有语句字符串必须是双引号。
答案 2 :(得分:1)
如果它是一个小数据集,我会选择Tikkes回答显示的纯SQL路线;但是,出于索引目的,计算边界可能会更好。
$lowerBound = date('Y-m-d H:i:s', mktime(0, 0, -1, 1, 1, date('Y')); //1 second before 00:00:00 1 Dec <current year>
$upperBound = date('Y-m-d H:i:s', mktime(0, 0, -1, 1, 1, date('Y') + 1); //1 second before 00:00:00 1 Dec <current year + 1>
那么你就把它们放在一个查询中:
$sql = " ... WHERE d > '$lowerBound' AND d < '$upperBound'";
答案 3 :(得分:1)
你应该使用BETWEEN
,它更具可读性。
MySQL有一个很棒的list of date and time functions
基本上,你想要做的是:
SELECT *
FROM Store_Information
WHERE Date BETWEEN '$start' AND '$end'
我不知道您从哪个数据开始,或者您获得$ start和$ end输入的位置。我假设您正在使用从time()生成的unix时间戳,然后您可以执行以下操作:
SELECT *
FROM Store_Information
WHERE Date BETWEEN FROM_UNIXTIME('$start') AND FROM_UNIXTIME('$end')
如果这还不够,请更清楚你如何格式化你的indata($ start,$ end)。