[英]How to sort by Date from MYSQL using PHP
我有一个php页面,该页面允许用户按几个因素对信息进行排序。 一个新的要求是按“最近15天内已注册的所有项目”进行排序。 我将日期存储在MYSQL表中,为mm/dd/yyyy
。
使用$ _GET变量在同一页面上传递和获取信息,但是由于某种原因,我无法使代码正常工作。 我浏览了许多网站,但找不到有效的解决方案。
最终,脚本将按以下方式工作:
请选择所有KDATE在今天日期后15天内的人(例如,如果今天是2010年8月19日,则从2010年8月4日开始注册的所有人都会出现)。
到目前为止,我的脚本(不起作用)是:
if (isset($_GET['date'])) {
$query = "SELECT *
FROM persons
WHERE DATE_SUB(CURDATE(),INTERVAL 15 DAY) <= KDATE
ORDER BY KDATE ASC";
}
KDATE
IS KDATE
我很抱歉,但KDATE存储为TEXT
科林提供的答案解决了我的问题。 我将研究如何将数据转换为日期时间格式,但希望该小组可以提供这样做的实际好处。
再次谢谢大家
首先,如果您只想使用带有日期的列,那么使用VARCHAR而不是DATE是一个非常糟糕的主意。
如果要使用字符串作为日期,则需要使用STR_TO_DATE()进行转换,并且可能不希望使用这些说明来正确格式化日期。
应该这样做:
SELECT *
FROM persons
WHERE DATE_SUB(CURDATE(),INTERVAL 15 DAY) <= STR_TO_DATE(KDATE, "%c/%d/%Y")
ORDER BY STR_TO_DATE(KDATE, "%c/%d/%Y") ASC
由于kdate
是VARCHAR,因此您需要使用STR_TO_DATE将其更改为DATETIME 。
运行此命令之前,您需要修复不适合该模式(mm / dd / yyyy)的kdate
数据:
SELECT *
FROM persons
WHERE DATE_SUB(CURDATE(),INTERVAL 15 DAY) <= STR_TO_DATE(KDATE, 'm/%d/%Y')
ORDER BY STR_TO_DATE(KDATE, 'm/%d/%Y') ASC
kdate
上的索引是无用的,因为必须更改数据类型。 到达 DATETIME后,您可以使用DATE_FORMAT随意更改格式 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.