最近项目中有一个小需求,用到了order by和 union,遇到了一点小问题,相信大家以后也会有类似的需求,与大家分享。

先说一下我们的需求:就是在分页查询活动信息的时候,要求的显示格式是先显示未结束的活动按照最近要结束的放在前面,然后显示已经结束的活动,按照最新结束的在上面,这样的需求自然而然的想到了union all,union all和union的区别大家应该都知道就是union去重,union all不去重,开始写的语句是这样的(上代码有点乱,大家凑活着看吧~~~)

(select t.*,d.* from

(select a.id activeId,a.name activeName,a.base_gold baseGold,

a.start_time startTime,a.end_time endTime,a.valid, betLog.num,

betLog.u_center_id uid from t_user_bet_log betLog

left join t_active a on betLog.active_id = a.id group by activeId,uid )t

left join t_draw d on t.activeId = d.active_id

WHERE t.uid= 3000 AND  t.valid=1 ANDt.startTime<=now() AND t.endTime >= now() AND ISNULL(d.id) order by t.endTime asc)

union all

(select t.*,d.* from

(select a.id activeId,a.name activeName,a.base_gold baseGold,

a.start_time startTime,a.end_time endTime,a.valid,

betLog.num,betLog.u_center_id uid from t_user_bet_log betLog

left join t_active a on betLog.active_id = a.id group by activeId,uid)t

left join t_draw d on t.activeId = d.active_id

WHERE t.uid= 3000 AND t.valid=1 AND ((t.endTime<now()) OR (d.active_team_id=-1))order by t.endTime desc)

加粗的是主要逻辑,单独执行子查询顺序都是正确的,但是当两个子查询union all的时候就会出现顺序混乱的情况,为了一下兆满说union all和union都是会影响子查询的输出结果,所以要将语句改造,下面是我改造的语句,主要思想就是先给两个子查询排序,让union all 不会影响子查询的顺序,再处理一下时间变成自己需要的输出形式:

select * from(

(select t.*,d.*,10 'idx',endTime - now() time1 from

(select a.id activeId,a.name activeName,a.base_gold baseGold,

a.start_time startTime,a.end_time endTime,a.valid, betLog.num,

betLog.u_center_id uid from t_user_bet_log betLog

left join t_active a on betLog.active_id = a.id group by activeId,uid )t

left join t_draw d on t.activeId = d.active_id

WHERE t.uid= 3000 AND  t.valid=1 ANDt.startTime<=now() AND t.endTime >= now() AND ISNULL (d.id))

union all

(select t.*,d.*,20 'idx',now()-endTime time1 from

(select a.id activeId,a.name activeName,a.base_gold baseGold,

a.start_time startTime,a.end_time endTime,a.valid,

betLog.num,betLog.u_center_id uid from t_user_bet_log betLog

left join t_active a on betLog.active_id = a.id group by activeId,uid)t

left join t_draw d on t.activeId = d.active_id

WHERE t.uid= 3000 AND t.valid=1 AND ((t.endTime<now()) OR (d.active_team_id=-1)))

order by idx,time1 asc)ttt

上代码就是有点乱。。。一个asc和一个desc,小处理了一下都变成了asc的。

MySQL 之union all 与 order by 同时出现问题相关推荐

  1. mysql中union all的order by问题

    今天写mysql数据库代码的时候,发现union的结果不是预期的 $stime = date("H:i:s"); $sql1 = "select * from T whe ...

  2. mysql union (all) 后order by的排序失效问题解决

    mysql union (all) 后order by的排序失效问题解决 参考文章: (1)mysql union (all) 后order by的排序失效问题解决 (2)https://www.cn ...

  3. mysql中union 查询

    mysql中union 查询 UNION ALL只是简单的将两个结果合并后就返回.这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了. 从效率上说,UNION ALL 要比 ...

  4. mysql使用union顺序混乱

    使用mysql用union并子集中用order by排序顺序会混乱 1. (select id from a order by start_time asc) union all (select id ...

  5. mysql union result,【经验】Mysql的UNION用法解析及TP中写法

    最近也是在写项目中碰到的这个问题,需要将两个SELECT查询结果组合起来进行分组排序,想到了用union方法,用TP的union操作根本无法完成复杂的union操作,于是搜罗了一下,先说一下union ...

  6. mysql group by日期_深入研究mysql中group by与order by取分类最新时间内容

    鉴于项目的需要,就从网上找到该文章,文章分析得很详细也很易懂,在android里,(不知道是不是现在水平的限制,总之我还没找到在用 ContentProvider时可以使用子查询),主要方法是用SQL ...

  7. mysql: union / union all / 自定义函数用法详解

    mysql: union / union all http://www.cnblogs.com/wangyayun/p/6133540.html mysql:自定义函数用法详解 http://www. ...

  8. mysql orderby asc_MySQL 数据排序 order by

    1.单一字段排序 select * from tablename order by field1 desc; 排序采用order by+排序字段升序关键字(asc,desc),排序字段可以放多个,多个 ...

  9. mysql查询结果升序_MySQL ORDER BY:对查询结果进行排序

    在MySQL SELECT 语句中,ORDER BY 子句主要用来将结果集中的数据按照一定的顺序进行排序. 其语法格式为: ORDER BY { | | } [ASC|DESC] 语法说明如下. 1) ...

  10. mySql中union all 及max,ifnull用法

    mySql中union all 及max,ifnull用法 selectifnull(max(d.orderNum),0) totalNum,ifnull(max(d.money),0) totalM ...

最新文章

  1. python中的新式类与旧式类的一些基于descriptor的概念(上)
  2. linux 内核 fork,《Linux内核分析》之分析fork函数对应的系统调用处理过程
  3. WGCNA分析,简单全面的最新教程
  4. 0.0 目录-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  5. JavaFX给控件添加css样式
  6. class-感知机Perception
  7. 微信小程序开发学习笔记006--微信小程序组件详解02
  8. 天玑800处理器支持鸿蒙系统吗,为何Redmi Note 9选择天玑800U处理器?和骁龙750G差距多大...
  9. python语音合法命名-下列哪些语句在Python中是合法的( )
  10. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-4.动态Sql语句Mybaties SqlProvider...
  11. 《华为研发》读书笔记与读后感范文3300字
  12. 初级商业数字营销师直通车题库
  13. opencv(16) ROI区域图像叠加图像混合
  14. Word文档输出为pdf时目录出现“错误!未定义书签!”
  15. PDF文件解密安全口令
  16. 8段数码管C语言,单片机控制4位8段数码管显示温度的程序谁会啊
  17. 【Python】import class/import module
  18. RSA算法计算d的两种方法。
  19. Dell服务器做磁盘阵列
  20. 关于eclipse无法连接手机调试问题

热门文章

  1. 一网打尽系列之史玉柱运营法则
  2. java itextPdf导出pdf
  3. Mybatis 札记(三、分页、注解开发)麻雀虽小,五脏俱全
  4. sqlserver2008使用设置sa用户登录步骤
  5. Marlin固件的欢迎界面
  6. OAuth2.0新浪微博开放平台、腾讯社区开放平台
  7. 《东周列国志》第八十四回 智伯决水灌晋阳 豫让击衣报襄子
  8. 博客做外链不收录怎么办,如何利用博客做外链
  9. 在XX小学六一儿童节庆祝大会上的致辞
  10. tools: USB、MiniUSB、MicroUSB接线