Mysql select 按照自定義順序排序

2021-10-06 22:59:13 字數 844 閱讀 4397

這周遇到了乙個新的需求,為我們的使用者在可用狀態之外,再增加乙個狀態,叫做停用。然後使用者列表頁的排序按照先按照可用,後停用。在這兩個排序中,再按照時間順序倒敘。

對於增加乙個狀態而言,我們需要在對應的資料庫表中新填乙個字段user_status,用來描述使用者所處狀態。考慮到使用者除了正常(可用)狀態、停用狀態之外,還有其他狀態比如說欠費,或者違規狀態,就不能使用bit型別,而是使用了tiny int unsigned型別來做資料型別。這樣可以使用 八位二進位制 256種狀態來描述。

對於第乙個新的功能模組而言,單純按照user_statusasc,creatimestampdesc 排序,(斜體表示資料庫表字段)但是考慮到如果將來後來者有限的情況,這種排序方式就不能滿足條件了。

比如說,1 是 可用狀態,2是停用狀態。 那當前情況:使用者列表頁的排序按照先按照可用,後停用。在這兩個排序中,再按照時間順序倒敘,是滿足的。

但是,多加乙個狀態,3是欠費狀態。那麼排序方式變成 先可用,再欠費,最後停用來說,就不滿足了。

查了一下,可以使用資料庫 field(資料庫字段, 排序最優先內容,排序第二有限內容,…)的方式,來排序。

比如說select * from account order by field(account.user_status, 0, 1) asc, created desc

就是先按照 使用者狀態0,1 開始順序排序,再在各個分類中按照 created 倒序排序。

從這上面來看,用來定義排序順序的字段最好是乙個有限的值,或者說是乙個列舉。

因為涉及到資料庫計算,所以最好給對應的字段加上乙個索引。

python字典實現按照自定義順序排序

還是對於python字典理解不透徹,試圖通過sort來給python的key指定順序,幾經試驗,仍然得不到想要的效果,後來一想,python的字典不是本來就無序的麼?老王python的文章裡這樣寫 鏈結 如果把python列表做為一種有序的物件集合型別的話,那python字典就是無序的集合型別,py...

python字典實現按照自定義順序排序

還是對於python字典理解不透徹,試圖通過sort來給python的key指定順序,幾經試驗,仍然得不到想要的效果,後來一想,python的字典不是本來就無序的麼?老王python的文章裡這樣寫 鏈結 如果把python列表做為一種有序的物件集合型別的話,那python字典就是無序的集合型別,py...

Ruby中Hash按照自然順序輸出

本來打算按照複製的順序輸出,但是結果出乎預料。查了一下,hash本身就是無序的 之後又看到了日本人的一篇帖子 url ruby1.8 以下,hash的順序是不固定的 h hash.new h c c h b b h a a h.each key do k p kend c a b 這裡沒有按照期望的...