【发布时间】:2011-04-01 08:49:53
【问题描述】:
我有一个 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 TEXT - 抱歉,KDATE 存储为 TEXT
更新 2:
Colin 提供的答案解决了我的问题。我会考虑尝试将数据转换为日期时间格式,但希望该小组能够提供这样做的实际好处。
再次感谢大家
【问题讨论】:
-
您的意思是 KDATE 字段是 VARCHAR?
-
使用 MySQL
Date(或DateTime)类型存储您的日期,您不会遇到这些问题 ;-)... -
@ircmaxell:这如此 疯狂,它可能只是工作=)
-
@JM4:矫枉过正和单纯的浪费/低效是有区别的。这就像将核导弹带入刀战。当然,它更强大,但它也更难移动(因此会减慢你的速度)......而且它完全浪费了手头的资源......
-
哦,@OMG:
TEXT数据类型最多支持 65,536 个字符(我说最多,因为它取决于存储的字符)。而且这不仅是矫枉过正,而且效率低下,因为数据甚至没有与行一起存储(因此对其进行选择会导致驱动器因搜索而受到冲击,因为它不能只使用行缓冲区)。如果您知道需要超过 255 个字符,请仅使用TEXT。否则使用CHAR或VARCHAR(将它们的数据存储在行本身)...