0

我有一个函数可以获取所有新注册的用户,并根据过滤器显示它是按月还是按年新注册。

在这个例子中,我使用的是年份,我有这个 sql

Select date_registered from users where date_registered > '2011-12-31 12:59:59' AND date_registered < '2013-01-01 12:00:00'

所以这将导致所有date_registered注册为 2012 年

问题是如何变得更有活力,例如我可以应用过滤器 where date_registered > $dynamic_date and date_registered < $dynamic_date

或任何好的建议如何更好地实现这一目标。

谢谢 。.

4

4 回答 4

2

我相信这就是您正在寻找的:

$sql = "SELECT date_registered 
       FROM users
       WHERE YEAR(date_registered) = YEAR(NOW())";

看看这个以获取更多信息

既然你也想要正确的星期,那么还要看看函数YEARWEEK()。它以相同的方式工作并返回周数。看这里

于 2012-06-01T06:48:46.060 回答
1

try this code

$sql = "SELECT date_registered FROM users WHERE date_registered > '$dateStart' AND date_registered < '$dateEnd'";

where $dateStart and $dateEnd are your dynamic date variables

A pair of SINGLE quotes around your variables should be enough. All the statement string has to be in DOUBLE quotes as you see.

于 2012-06-01T06:46:44.230 回答
1

如果它是一个小数据集,我会走 Tikkes 的回答显示的纯 SQL 路线;但是,出于索引目的,计算边界可能会更好。

mktimedate可用于此:

$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'";
于 2012-06-01T06:49:44.023 回答
1

您应该使用BETWEEN,它更具可读性。

MySQL 有一个很棒的日期和时间函数列表

基本上,你想要做的是:

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

如果这还不够,请更清楚您如何格式化您的数据($start,$end)。

于 2012-06-01T06:57:42.603 回答