【发布时间】:2016-01-06 14:14:01
【问题描述】:
这是我的桌子:
+----+-----------------+
| id | timestamp |
+----+-----------------+
| 1 | 1452001861 | -- yesterday
| 2 | 1452088272 | -- today
| 3 | 1452088283 | -- today
| 4 | 1451915461 | -- last week
| 5 | 1452001861 | -- yesterday
| 6 | 1452088263 | -- today
| 7 | 1252388263 | -- out of {today, yesterday, last week}
| 8 | 1452088312 | -- today
| 9 | 1452001762 | -- yesterday
| 10 | 1222388263 | -- out of {today, yesterday, last week}
| 12 | 1451915459 | -- last week
+----+-----------------+
现在我想这样选择:
+----+-----------------+---------------+
| id | timestamp | range |
+----+-----------------+---------------+
| 1 | 1452001861 | yesterday |
| 2 | 1452088272 | today |
| 3 | 1452088283 | today |
| 4 | 1451915461 | last week |
| 5 | 1452001861 | yesterday |
| 6 | 1452088263 | today |
| 7 | 1252388263 | out |
| 8 | 1452088312 | today |
| 9 | 1452001762 | yesterday |
| 10 | 1222388263 | out |
| 12 | 1451915459 | last week |
+----+-----------------+---------------+
// ^ this column isn't a real column
好吧,我能做的就是选择今天:
SELECT
id,
date_time
FROM
viewed
WHERE
DATE_FORMAT(FROM_UNIXTIME(`date_time`), '%Y-%m-%d') >= (DATE_FORMAT(NOW(), '%y-%m-%d') - INTERVAL 1 DAY)
正如我所说,这个查询 ^ 只选择今天的时间戳。
我的问题:现在我想知道,如何将我的查询扩展到{今天、昨天 - 上周}?
【问题讨论】:
-
我认为 MySQL 中没有“今天”、“昨天”、“上周”的内置分类。您所能做的就是计算从今天开始的天数(类似于
DATEDiFF(CURDATE(), timestamp) AS daysSinceToday),然后让您的PHP 脚本对其进行分类(if($daysSinceToday == 0) //today// elseif ($daysSinceToday == 1) //yesterday// elseif ($daysSinceToday > 7) //Last 7 days//)。当您想像在 SO 上那样打印它们时,您还必须先让它们由 MySQL 订购。