久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL怎么使用union all獲得并集排序

150次閱讀
沒有評論

共計 1678 個字符,預計需要花費 5 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這篇文章將為大家詳細講解有關 MySQL 怎么使用 union all 獲得并集排序,丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

項目中有時候因為某些不可逆轉的原因使得表中存儲的數據難以滿足在頁面中的展示要求。之前的項目上有文章內容的展示功能,文章分為三個狀態待發布、已發布、已下線。

他們在數據表中判斷狀態的字段(PROMOTE_STATUS)值分別為 0、1、2。一開始的需求是文章只展示待發布和已發布,已發布排在待發布前面,并且兩種狀態下在根據自己的情況去排序。這樣的實現比較簡單,如下的 order by 語句就可以實現了。

order by PROMOTE_STATUS desc,SEQUENCE_ID desc……

結果移交測試之后,產品覺得這里可以優化下,文章的展示要改為已發布、待發布、已下線(沒錯,已下線它突然就要了,而且很傲嬌的排在了最后)。那怎么辦嘞?改表將已發布、待發布、已下線的 PROMOTE_STATUS 對應值改為 2、1、0 肯定是行不通的,因為這個表其他的同事也用了。若是改了這里的對應關系。其他同事的代碼的判斷邏輯都得動。

所以就想到了 union all,然后還需要實現文章在三個狀態下的各自展示順序。所以,最終的思路就是將 PROMOTE_STATUS 分別為 1、0、2 時的數據查出來,然后根據每種狀態下的情況進行 order by 排序,最后將各個子集 union all 之后返回給頁面展示。

最終的 sql 語句如下:

select
 PROMOTE_ID,
 SEQUENCE_ID,
 PROMOTE_STATUS,
 PROMOTE_TITLE,
 RELEASE_DATE
 FROM (
 (SELECT
 PROMOTE_ID,
  SEQUENCE_ID,
  PROMOTE_STATUS,
 PROMOTE_TITLE,
 RELEASE_DATE 
 FROM SYS_TEXT_PROMOTE
 WHERE
 ENABLED_FLAG =  1 
 AND PROMOTE_STATUS=1
 AND SORT_ID = #{params.sortId}
 order by SEQUENCE_ID DESC,LAST_UPDATE_DATE DESC) a)
union all
select
 PROMOTE_ID,
 SEQUENCE_ID,
 PROMOTE_STATUS,
 PROMOTE_TITLE,
 RELEASE_DATE
 FROM (
 (SELECT
 PROMOTE_ID,
  SEQUENCE_ID,
  PROMOTE_STATUS,
 PROMOTE_TITLE,
 RELEASE_DATE 
 FROM SYS_TEXT_PROMOTE
 WHERE
 ENABLED_FLAG =  1 
 AND PROMOTE_STATUS=2
 AND SORT_ID = #{params.sortId}
 order by RELEASE_DATE DESC,LAST_UPDATE_DATE DESC) b)
union all
select
 PROMOTE_ID,
 SEQUENCE_ID,
 PROMOTE_STATUS,
 PROMOTE_TITLE,
 RELEASE_DATE
 FROM (
 (SELECT
 PROMOTE_ID,
  SEQUENCE_ID,
  PROMOTE_STATUS,
 PROMOTE_TITLE,
 RELEASE_DATE 
 FROM SYS_TEXT_PROMOTE
 WHERE
 ENABLED_FLAG =  1 
 AND PROMOTE_STATUS=0
 AND SORT_ID = #{params.sortId}
 order by RELEASE_DATE DESC,LAST_UPDATE_DATE DESC) c)

關于“MySQL 怎么使用 union all 獲得并集排序”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計1678字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 汶川县| 时尚| 宁蒗| 大渡口区| 兰西县| 巴南区| 漳平市| 普兰店市| 绿春县| 行唐县| 耒阳市| 茌平县| 城步| 武山县| 勐海县| 都兰县| 分宜县| 宜兰市| 琼结县| 璧山县| 平湖市| 平原县| 中超| 大厂| 门源| 襄垣县| 葫芦岛市| 建始县| 岳西县| 西乌珠穆沁旗| 石家庄市| 宝鸡市| 东安县| 隆昌县| 巴彦淖尔市| 夏河县| 青河县| 中卫市| 库车县| 龙江县| 商洛市|