論壇中不同類型的貼的排序問題(涉及數據庫的:CASE... END)

在論壇中,會有不同類型的帖子,比如說:普通貼、精華帖、置頂帖;

論壇的這些貼子會根據不同的類型進行排序,當然不僅僅只是看帖子類型,還有貼子的動態情況來進行排序。

在這裏演示一下簡單的帖子排序,我們只關注帖子的最新動態時間和帖子類型進行排序。

其中最新動態的時間是這樣確定的:如果剛創建的新帖,那麼該帖子的最新動態時間就爲該帖子的創建時間;如果有最新的回覆,那麼最新的動態時間就爲最新回覆的時間;

排序條件:

  1. 最新動態時間越新越靠前

  2. 普通貼跟精華貼之間在排序上沒有區別,置頂帖肯定是最頂層的。

也就是說,排序的時候先排置頂帖,並且根據最新動態的時間排序置頂帖之間的順序,然後再根據最新動態時間去排普通貼和精華帖的順序。

那麼我們在數據庫中查詢帖子集合的時候,根據SQL語句就查詢出排好序的數據,該怎麼做呢?

我們此時就要用到SQL的CASE WHEN ? THEN ? (,WHEN ? THEN ) ELSE ? END。

如: SELECT * FROM Topic t WHERE t.forum = ? ORDER BY (CASE t.type WHEN 2 THEN 2 ELSE 0 END) DESC , t.lastUpdateTime DESC ;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章