2016-01-06 6 views
0

Вот мой стол:Как классифицировать временную метку?

+----+-----------------+ 
| 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) 

В I said, Этот запрос^выбирает только сегодняшние отметки времени.


Мой вопрос: Теперь я хочу знать, как я могу расширить мой запрос к {сегодня, вчера - на прошлой неделе}?

+0

Я не думаю, что есть встроенный в классификации «Сегодня», «Вчера», «На прошлой неделе» в MySQL. Все, что вы могли сделать, это рассчитать дни с сегодняшнего дня (что-то вроде 'DATEDiFF (CURDATE(), timestamp) AS daysSinceToday'), а затем ваш PHP-скрипт классифицирует его (' if ($ daysSinceToday == 0) // today // elseif ($ daysSinceToday == 1) // вчера // elseif ($ daysSinceToday> 7) // Последние 7 дней // '). Когда вы хотите распечатать их, как на SO, тогда вам также придется сначала их заказать MySQL. –

ответ

2

Неполный ответ, чтобы вы начали ...

SELECT CASE DATE(FROM_UNIXTIME(1452001861)) 
     WHEN CURDATE() - INTERVAL 1 DAY THEN 'yesterday' 
     WHEN CURDATE() THEN 'today' END x; 
+0

Преобразование цифр DATE, как я думаю, является хорошим улучшением формулировки проблемы, поскольку оно предотвращает некоторые сложные ручные расчеты даты и времени заново. – B98

Смежные вопросы