MySQL 查詢中保留 IN 中的順序

菜就多努力呀n發表於2019-07-09

今天碰到一個自己之前挖的坑,資料庫設計不合理,導致排序不好搞。

  1. 需求:員工入職步驟中每一步的人員將未分配(未移交給下一步)員工置頂展示;

    • 表結構如下:

    Mysql 查詢中保留 IN 中的順序
    Mysql 查詢中保留 IN 中的順序

    • 需求例項: current『當前步驟』都為 2『培訓部』 的所有員工,將還沒有分配給 3『裝置分發部』的員工置頂,目前解決方式是根據 community_end『培訓部結束時間戳,即為裝置分發部的開始時間戳』正序排列,此處則引出標題 ~
  2. 解決方案:

    • Order by field();
    • 用和不用的 SQL 語句貼上:
      SELECT * FROM `user_temporary` WHERE ( `id` IN ('29500','29582','29583','28299') ) LIMIT 0, 20;
      SELECT * FROM `user_temporary` WHERE ( `id` IN ('29500','29582','29583','28299'') ) ORDER BY field(id,29500,29582,29583,28299) LIMIT 0, 20;
  3. 事後反思:往後設計資料庫時,應該儘可能多的考慮到不同的查詢場景,根據查詢場景設計相應的資料表;

  4. 如果各位老師還有更好的解決方案,望不吝賜教哦 ~

    原文連結:【MySQL】查詢保持 IN 中的順序

刻意練習,日益精進。

相關文章