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

Php 检索给定月份的所有日期的记录?,php,mysql,wordpress,Php,Mysql,Wordpress,如何通过在查询中提供月份从Mysql获取所有记录? 我在php项目中工作,我有一个mysql的帖子表,其中所有帖子都保存有日期(不是发布日期或帖子日期,而是任意日期)。 现在,我从前端选择月份,并查询给定月份的帖子。 如何检索该月之间的帖子?您可以使用MySQL的month()函数 您可以将where条件添加为 WHERE YEAR(col_name_of_date) = 2014 AND MONTH(Date) = 4"; 或 这需要日期的列col_name_为date或DATETIME类

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

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


您可以将where条件添加为

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

这需要日期的列col_name_为
date
DATETIME
类型

另外,您应该避免使用这种DATE()函数,因为它是mysql服务器的一个负载

最好先在PHP端构造date参数,然后再将其传递给查询。如果你 了解蛾类的开始和结束,并能以
Y-m-d
格式轻松构建开始和结束日期。开始日期d始终为01,结束日期为当月的最后一天

使用DATE()和不使用DATE检查查询的行为

我有一个没有索引regdate的表users

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 |
+----+-------------+-------+-------+---------------+---------------+---------+------+------+--------------------------+
现在你可以看到它更好了。

你可以使用MONTHName()函数来检查数据,以及你选择的rom前端月份的名称

SELECT  * FROM tablename WHERE MONTHNAME(date_column) = "March"
您可以启动此查询 从表中选择*,其中日期=>'$date1'和日期='$date2'
要查找任意两个日期之间的数据

仅获取月份之间的数据而不获取年份,将产生错误的数据!!2014/03年度和2013/03-03年度的情况相同。更多关于问题中的一些数据和表格结构。年份将是当前年份SQL表格中日期的格式是什么?它是数字unix时间戳吗?如果您可以发布一个代码示例和一小部分当前表数据,这将有所帮助。预期的输出将帮助您获得更直接的答案。可能重复的
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 |
+----+-------------+-------+-------+---------------+---------------+---------+------+------+--------------------------+
SELECT  * FROM tablename WHERE MONTHNAME(date_column) = "March"