给大家用过实例分析了 Mysql 查询中指定顺序排序的相关技术问题, 需要的朋友参考一下吧
最近做一个大屏展示项目, 类似于机场, 火车站那种展示班次信息的那种, 不过展示的内容要复杂的多, 其中部分数据如下:
前端主要用 vue 框架, 要求后端数据在前端展示,
第一: 进厂, 出厂指标不固定 (可能 6, 也可能以后 7,8 个);
第二: 无数值值的用斜杠代替;
第三: 进出厂指标名字一定要符合如上图指定的名字 (后端数据库查询出来的名字和前端指定的名字不一样, 以及单位中带有 ">1",">0.3" 之类的, 所以不能直接从后端查询 , 名字 + 单位 放在前端, 需要自己处理); 第四: 要求后端数据传输过来的顺序必须时前端指定顺序反正要求就是, 前端只需要循环出数据就好, 后端搞定其余的一切需求
有两张表: table_a,table_b
第一步: 按照 table_a.id=table_b.ids 合成一张表
sql 语句: SELECT * FROM (SELECT * FROM table_a a INNER JOIN table_b b ON a.id=b.ids)A , 把下划线部分作为新的一张表 A
第二步: 发现数据库中没有小白龙和沙悟净, 需要添加上:
sql 语句:
- SELECT * FROM (SELECT * FROM table_a a INNER JOIN table_b b ON a.id=b.ids
- UNION ALL
- SELECT 8 id,'白龙马' `name`,'小白' sname,'1000' age ,8 ids, 27 `value`
- UNION ALL
- SELECT 9 id,'沙悟净' `name`,'卷帘将军' sname,'2000' age ,9 ids, 289 `value`
- )A
划线部分在于添加部分缺失数据, 有时用于前端固定展示需要
第三步: 请按照 唐僧, 孙悟空, 猪八戒, 沙悟净, 小白龙, 春花, 王五, 赵六, 唐七这个顺序排序
sql 语句:
- SELECT * FROM (SELECT * FROM table_a a INNER JOIN table_b b ON a.id=b.ids
- UNION ALL
- SELECT 8 id,'白龙马' `name`,'小白' sname,'1000' age ,8 ids, 27 `value`
- UNION ALL
- SELECT 9 id,'沙悟净' `name`,'卷帘将军' sname,'2000' age ,9 ids, 289 `value`)A
- INNER JOIN (SELECT 7 ids, 1`order`
- UNION ALL
- SELECT 2 ids, 2`order`
- UNION ALL
- SELECT 4 ids, 3`order`
- UNION ALL
- SELECT 9 ids, 4`order`
- UNION ALL
- SELECT 8 ids, 5`order`
- UNION ALL
- SELECT 6 ids, 6`order`
- UNION ALL
- SELECT 1 ids, 7`order`
- UNION ALL
- SELECT 5 ids, 8`order`
- UNION ALL
- SELECT 3 ids, 9`order` ) B ON B.ids=A.id
- ORDER BY B.order
划线部分的这类语句是 给整个 A 表添加了两个字段, 再达到按照指定方式达到固定排序的目的; 同时也可以增加字段达到其他想要的目的
以上就是我们本次介绍 Mysql 指定顺序排序查询的全部内容, 如果大家还有任何不明白的地方可以在下方留言区讨论
来源: http://www.phperz.com/article/18/0227/362521.html