检索给定月份的所有日期的记录?

时间:2014-04-11 10:14:35

标签: php mysql wordpress

如何通过在查询中提供月份来从Mysql获取所有记录? 我在php项目中工作,我有一个mysql表,其中所有帖子都保存了日期(不是发布日期或发布日期,但任何随机日期)。 现在我从前端选择月份并查询给定月份的帖子。 如何检索那个月之间的帖子?

4 个答案:

答案 0 :(得分:0)

您可以使用MySQL的MONTH()函数

SELECT * FROM tbl WHERE MONTH( date_col ) = 3

答案 1 :(得分:0)

你可以添加条件为

WHERE YEAR(col_name_of_date) = 2014 AND MONTH(Date) = 4"; 

WHERE YEAR(col_name_of_date) = YEAR(now()) AND MONTH(Date) = 4"; 

这需要列col_name_of_date为DATEDATETIME类型。

此外,你应该避免使用这种DATE()函数,因为它是对mysql服务器的加载。

在将它们传递给查询之前,最好在PHP端构造date参数。如果你 知道飞蛾的开始和结束,并可以轻松地以Y-m-d格式构建开始和结束日期。对于开始日期,d始终为01,结束日期为该月的最后一天。

使用DATE()和没有日期

检查查询的行为方式

我有一个表用户,其中regdate未编入索引

explain select count(*) from users where year(regdate) = year(now()) and month(regdate) = 01 ;
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows  | Extra       |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
|  1 | SIMPLE      | users | ALL  | NULL          | NULL | NULL    | NULL | 79309 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+

你可以看到它可以扫描的行数是表格的上限。

现在让我们添加一个索引

mysql> alter table users add index `u_regdate_idx`(`regdate`) ;
Query OK, 79309 rows affected (1.44 sec)
Records: 79309  Duplicates: 0  Warnings: 0

现在再次运行

mysql> explain select count(*) from users where year(regdate) = year(now()) and month(regdate) = 01 ;
+----+-------------+-------+-------+---------------+---------------+---------+------+-------+--------------------------+
| id | select_type | table | type  | possible_keys | key           | key_len | ref  | rows  | Extra                    |
+----+-------------+-------+-------+---------------+---------------+---------+------+-------+--------------------------+
|  1 | SIMPLE      | users | index | NULL          | u_regdate_idx | 4       | NULL | 79309 | Using where; Using index |
+----+-------------+-------+-------+---------------+---------------+---------+------+-------+--------------------------+

你可以看到表现没有变化。

现在让我们更改查询并查看

mysql> explain select count(*) from users where regdate between '2014-01-01' AND '2014-01-31' ;
+----+-------------+-------+-------+---------------+---------------+---------+------+------+--------------------------+
| id | select_type | table | type  | possible_keys | key           | key_len | ref  | rows | Extra                    |
+----+-------------+-------+-------+---------------+---------------+---------+------+------+--------------------------+
|  1 | SIMPLE      | users | range | u_regdate_idx | u_regdate_idx | 4       | NULL |    1 | Using where; Using index |
+----+-------------+-------+-------+---------------+---------------+---------+------+------+--------------------------+

现在你可以看到它好多了。

答案 2 :(得分:0)

您可以使用MONTHName()函数检查您在前端选择的月份名称的数据。

SELECT  * FROM tablename WHERE MONTHNAME(date_column) = "March"

答案 3 :(得分:0)

您可以触发此查询 从表中选择*,其中Date =>'$ date1'和Date ='$ date2' 查找任意两个日期之间的数据