Php Mysql获取记录,其中MONTHNAME();YEAR()等于一个值
我试图从下表中获取所有“项目”id,其中条件为uid='1',月份='8月'和年份='2016'Php Mysql获取记录,其中MONTHNAME();YEAR()等于一个值,php,mysql,Php,Mysql,我试图从下表中获取所有“项目”id,其中条件为uid='1',月份='8月'和年份='2016' date | uid | project ------------------------------------------- Wed, 01 Aug 2016 | 1 | 11 Tue, 15 Aug 2016 | 2 | 11 Mon, 31 Aug 2016 | 1
date | uid | project
-------------------------------------------
Wed, 01 Aug 2016 | 1 | 11
Tue, 15 Aug 2016 | 2 | 11
Mon, 31 Aug 2016 | 1 | 11
Thu, 05 Sep 2016 | 1 | 12
Sat, 10 Sep 2016 | 2 | 12
Mon, 12 Feb 2017 | 3 | 12
Tue, 31 Feb 2017 | 1 | 13
Wed, 31 Mar 2017 | 2 | 13
Fri, 31 Mar 2017 | 3 | 13
Thu, 31 Mar 2017 | 1 | 14
下面是我使用的查询
SELECT project FROM logs where uid="1" AND MONTHNAME(STR_TO_DATE(date,'%W, %d %M %Y'))="August" AND YEAR(STR_TO_DATE(date,'%W, %d %M %Y'))="2016";
但它也恢复了其他月份的记录。我在这里做错了什么?我会像使用
一样使用:
SELECT project
FROM logs
WHERE uid = 1 AND
date LIKE '% Aug 2016';
不要将日期/时间值存储为字符串。如果你这样做了,不要叫他们“date”,而是叫他们类似“datestr”的名字,以防止出现意外错误。但是如果它是一个字符串,你可以把它当作一个字符串来对待。我只想用像
:
SELECT project
FROM logs
WHERE uid = 1 AND
date LIKE '% Aug 2016';
SELECT project
FROM logs
WHERE uid= 1
AND MONTHNAME(STR_TO_DATE(date,'%W, %d %M %Y'))= 'August'
AND YEAR(STR_TO_DATE(date,'%W, %d %M %Y'))= 2016
;
不要将日期/时间值存储为字符串。如果你这样做了,不要叫他们“date”,而是叫他们类似“datestr”的名字,以防止出现意外错误。但是如果它是一个字符串,你可以把它当作一个字符串。 <代码>和日期类似“%Aug%”和日期类似“% 2016%”< /代码>保持简单。如果你离这个项目不太远,你应该考虑使用MySQL的内置日期函数。你现在所做的是大量的工作<代码>和日期“%Aug %”和“%1”/<代码>的日期保持简单。如果你离这个项目不太远,你应该考虑使用MySQL的内置日期函数。你现在做的是很多工作,我看不到你的查询和我的查询之间的区别。你能解释一下吗?@Thowzif如果你提到uid和year part作为字符串使用作为整数。谢谢你的跟进。我使用了Gordon Linoff建议的查询。谢谢你的努力。我看不出你的问题和我的有什么区别。你能解释一下吗?@Thowzif如果你提到uid和year part作为字符串使用作为整数。谢谢你的跟进。我使用了Gordon Linoff建议的查询。谢谢你的努力。谢谢你的回答。此查询还返回2017年8月的记录。@Thowzif。它将如何做到这一点?类似于
的模式明确地包含了2016。您有不同日期格式的记录吗?谢谢您的查询。我已经弄明白了。这个结果是由一个\“字符产生的。谢谢你的回答。这个查询也会返回2017年8月的记录。@Thowzif…它是怎么做到的?类似于
的模式明确地有2016年。你有不同日期格式的记录吗?谢谢你的查询。我已经找到了。这是一个\”正是这个角色造成了这样的结果。
SELECT project
FROM logs
WHERE uid= 1
AND MONTHNAME(STR_TO_DATE(date,'%W, %d %M %Y'))= 'August'
AND YEAR(STR_TO_DATE(date,'%W, %d %M %Y'))= 2016
;