繁体   English   中英

如何使用PHP从MYSQL按日期排序

[英]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";
}

更新1:

KDATE IS KDATE我很抱歉,但KDATE存储为TEXT

更新2:

科林提供的答案解决了我的问题。 我将研究如何将数据转换为日期时间格式,但希望该小组可以提供这样做的实际好处。

再次谢谢大家

首先,如果您只想使用带有日期的列,那么使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM