MySQL中如何使用union all获得并集排序

分类:编程技术 时间:2024-02-20 15:22 浏览:0 评论:0
0
本文将详细讲解MySQL如何使用union all来获得联合排序。小编觉得很实用,所以分享给大家,作为参考。希望您读完本文后有所收获。

项目中有时会因为一些不可逆的原因,导致表中存储的数据无法满足页面上的显示要求。之前的项目有文章内容的展示功能。文章分为三种状态:待发布、已发表、下线。

数据表中判断状态的字段(PROMOTE_STATUS)的值分别为0、1、2。最初的要求是文章只显示待发表的文章和已发表的文章。已发表的文章排在待发表的文章之前,两种状态根据自己的情况排序。这种实现比较简单,可以通过下面的order by语句来实现。

按 PROMOTE_S 订购TATUS desc,SEQUENCE_ID desc...

结果交给测试后,产品觉得这个可以优化,文章的显示应该改为 Published 和 To Be Released ,已下线了(是的,已经下线了,突然要了,很得意,排在最后)。该怎么办?改表把released、待release、offline的PROMOTE_STATUS对应的值改成2、1、0肯定不行,因为其他同事也用过这个表。如果这里的对应关系发生改变。必须修改其他同事代码的判断逻辑。

于是我想到了union all,然后我还需要实现文章在三种状态下的显示顺序。因此最终的思路是分别找出PROMOTE_STATUS为1、0、2时的数据,然后根据各个状态的情况按order by排序,最后将所有子集合并返回页面进行处理展示。

最终sql语句如下:

select PROMOTE_ID, SEQUENCE_ID, PROMOTE_STATUS, PROMOTE_TITLE, RELEASE_DATE FROM (SELECT (SELECT (PROMOTE_ID, SEQUnce_id, Promotion_status、promote_title、release_date from sys_text_promote 其中enabled_flag = '1'且promote_status = 1且sort_id =#{Params.sor TID} 按Sequence_id 描述、Last_update_date 描述排序) A) Union allSelect Promotion_id、Sequence_id、Promote_Status、Promote_title、Release_date From ( SELECT PROMOTE_ID,p;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 allselect PRO MOTE_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} 按 RELE 排序ASE_DATE DESC,LAST_UPDATE_DATE DESC) c)

关于《MySQL如何使用union all获得并集排序?本文分享到这里,希望以上内容能够对大家有所帮助分享给大家,让大家学到更多的知识。如果您觉得文章不错,请分享给其他人,让更多的人看到。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > MySQL中如何使用union all获得并集排序

用户评论