hph+mysql怎樣讓時間按照目前時間來排序?該如何處理
來源:互聯網
上載者:User
hph+mysql怎樣讓時間按照目前時間來排序?
庫內如下內容:
+-----+-------+---------------------+
| gid | text | time |
+-----+-------+---------------------+
| 1 | 內容1 | 2012-03-09 14:30:28 |
| 2 | 內容2 | 2012-03-09 13:40:36 |
| 3 | 內容3 | 2012-03-09 14:50:43 |
| 4 | 內容4 | 2012-03-09 09:10:15 |
| 5 | 內容5 | 2012-03-09 15:21:22 |
| 6 | 內容6 | 2012-03-09 15:25:07 |
| 7 | 內容7 | 2012-03-09 16:21:43 |
| 8 | 內容8 | 2012-03-09 14:21:13 |
| 9 | 內容9 | 2012-03-09 12:21:55 |
+-----+-------+---------------------+
假如目前時間是 2012-03-09 14:10:05 就是互連網目前時間
我想要在這樣排序然後顯示出來
最頂上的是最接近於目前時間的.如果同一時間的按插入的先後順序
接下來的是 大於目前時間的,也就是時間還未到的 也是按插入先後順序
最下邊的是時間已經小於目前時間的,但是時間按大的排在小的上面
+-----+-------+---------------------+
| gid | text | time |
+-----+-------+---------------------+
| 8 | 內容8 | 2012-03-09 14:21:13 |
| 1 | 內容1 | 2012-03-09 14:30:28 |
| 3 | 內容3 | 2012-03-09 14:50:43 |
| 5 | 內容5 | 2012-03-09 15:21:22 |
| 6 | 內容6 | 2012-03-09 15:25:07 |
| 7 | 內容7 | 2012-03-09 16:21:43 |
| 2 | 內容2 | 2012-03-09 13:40:36 |
| 9 | 內容9 | 2012-03-09 12:21:55 |
| 4 | 內容4 | 2012-03-09 09:10:15 |
+-----+-------+---------------------+
在PHP裡應該怎麼寫$result=mysql_query()
------解決方案--------------------
實際上
set @tt='2012-03-09 14:10:05';
SELECT * FROM `times` order by t>@tt desc, if(t>@tt,[email protected], @tt-t)
是有問題的
雖然 if(t>@tt,[email protected], @tt-t) 與 abs([email protected]) 是等價的,但使用 abs([email protected]) 時並不能獲得正確的結果。由此可知 datetime 類型並不能直接參与數學運算
應寫作
set @tt='2012-03-09 14:10:05';
SELECT * FROM `times` order by t>@tt desc, abs(UNIX_TIMESTAMP(t)-UNIX_TIMESTAMP(@tt))
對於你的應用就是
$tt=date('Y-m-d H:i:s');
$result=mysql_query("SELECT * FROM mysf order by kfsj>'$tt' desc, abs(UNIX_TIMESTAMP(kfsj)-UNIX_TIMESTAMP('$tt'))");
時間常量要用引號括起
如果 $tt 總是取時間的當前值,那麼 $tt 可用 now() 代替