如何通过在查询中提供月份来从Mysql获取所有记录? 我在php项目中工作,我有一个mysql表,其中所有帖子都保存了日期(不是发布日期或发布日期,但任何随机日期)。 现在我从前端选择月份并查询给定月份的帖子。 如何检索那个月之间的帖子?
答案 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为DATE
或DATETIME
类型。
此外,你应该避免使用这种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' 查找任意两个日期之间的数据