【发布时间】:2013-09-16 20:35:03
【问题描述】:
第二次尝试这个,我就是不明白。
我想删除毕业日期已过的毕业生 vs $today 所以我想将记录集限制为仅那些在数据库中的日期是过去的学生。
我的表将 gradMonth 和 gradYear 存储为 varchar,即 2013 年 6 月。
所以,$today = strtotime(date("Y-F"))。这可以按预期工作并产生 1378008000。
我想连接 gradMonth,gradYear 的表字段值并将它们与$today 进行比较。
所以我的查询是:
SELECT
gradYear, gradMonth
FROM
myTable
WHERE
UNIX_TIMESTAMP(CONCAT_WS('-', gradYear, gradMonth, '01')) < '$today'
奇怪的是,这始终包括 2014 年 10 月和其他不小于 $today 的月份的记录,我不知道为什么。
感谢您提供的任何想法或帮助。
【问题讨论】:
-
感谢您的可读编辑。
-
如果有一个原生的
DATE列,MySQL 会更快乐。您在此处的此查询无法被索引,并且每次都需要行扫描,这对于非平凡数据集来说非常缓慢。 -
tadman - 数据库设置为 DATE 列的 YYYY-MM-DD,我们不要求特定的毕业日期,只要求月份和年份。如果我必须改变这一点,现在是时候这样做了,但我的观点有意义吗?这只是一个管理页面,不适用于外部用户。
-
好吧,随便选一个日期,比如
1,或者如果你只关心月份和年份,就足够接近了。拥有单独的列几乎总是很烦人,尤其是因为 MySQL 可以对本地列进行计算和验证,这对于两个原本不相关的整数来说并不容易。
标签: mysql unix-timestamp strtotime concat-ws