2016-01-06 41 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) 

正如我說,這個查詢^今天選擇時間戳。


我的問題:現在我想知道,我怎麼能擴大我的查詢{今天,昨天 - 上週}?

+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