mysql使用多条子语句排序查询,同时使用union连接,返回结果排序的问题处理办法

news/2024/7/2 1:24:16

处理前的排序方式(行政级别顺序:中心,所,村)

SELECT * FROM
	(
	(
SELECT
	*,
	( st_distance ( point ( longitude, latitude ), point ( 114.32602, 30.55383 ) ) * 111195 ) AS distance 
FROM
	activity_wish_list 
WHERE
	area_5 = 2426 
	AND enabled = 1 
ORDER BY
	distance ASC  -- 本村
	) UNION
	(
SELECT
	*,
	( st_distance ( point ( longitude, latitude ), point ( 114.32602, 30.55383 ) ) * 111195 ) AS distance 
FROM
	activity_wish_list 
WHERE
	area_4 = 2425 
	AND area_5 > 0 
	AND area_5 != 2426 
	AND enabled = 1 
ORDER BY
	distance ASC  -- 本所其他村
	) UNION
	(
SELECT
	*,
	( st_distance ( point ( longitude, latitude ), point ( 114.32602, 30.55383 ) ) * 111195 ) AS distance 
FROM
	activity_wish_list 
WHERE
	area_4 = 2425 
	AND area_5 = 0 
	AND enabled = 1  -- 本所
ORDER BY
	distance ASC 
	) UNION
	(
SELECT
	*,
	( st_distance ( point ( longitude, latitude ), point ( 114.32602, 30.55383 ) ) * 111195 ) AS distance 
FROM
	activity_wish_list 
WHERE
	area_3 = 2424 
	AND area_4 != 2425 
	AND area_5 > 0  -- 其他所的村
	AND enabled = 1 
ORDER BY
	distance ASC 
	) UNION
	(
SELECT
	*,
	( st_distance ( point ( longitude, latitude ), point ( 114.32602, 30.55383 ) ) * 111195 ) AS distance 
FROM
	activity_wish_list 
WHERE
	area_3 = 2424 
	AND area_4 != 2425 
	AND area_5 = 0 
	AND enabled = 1  -- 其他所
ORDER BY
	distance ASC 
	) UNION
	(
SELECT
	*,
	( st_distance ( point ( longitude, latitude ), point ( 114.32602, 30.55383 ) ) * 111195 ) AS distance 
FROM
	activity_wish_list 
WHERE
	area_3 = 2424 
	AND area_4 = 0 
	AND area_5 = 0 
	AND enabled = 1 -- 中心
ORDER BY
	distance ASC 
	) 
	) AS wish_list 
WHERE
	`enabled` = 1  
	AND `deleted_at` IS NULL 

运行结果并没有按照每个自语句排序好后显示出来。
问题在于:mysql中union和order by同时使用时,union优先级高于order by,实际上union连接多个子语句是没有排序的,这就是问题所在。

处理办法:在每个子语句的查询结果中加一个字段用于区分子语句的优先级,再按照所有子语句相同的排序规则去排序。如下:

SELECT *
FROM
	(
	(
SELECT
	*,
	0 AS temp,
	( st_distance ( point ( longitude, latitude ), point ( 114.32602, 30.55383 ) ) * 111195 ) AS distance 
FROM
	activity_wish_list 
WHERE
	area_5 = 2426 
	AND enabled = 1 
	) UNION
	(
SELECT
	*,
	1 AS temp,
	( st_distance ( point ( longitude, latitude ), point ( 114.32602, 30.55383 ) ) * 111195 ) AS distance 
FROM
	activity_wish_list 
WHERE
	area_4 = 2425 
	AND area_5 > 0 
	AND area_5 != 2426 
	AND enabled = 1 
	) UNION
	(
SELECT
	*,
	2 AS temp,
	( st_distance ( point ( longitude, latitude ), point ( 114.32602, 30.55383 ) ) * 111195 ) AS distance 
FROM
	activity_wish_list 
WHERE
	area_4 = 2425 
	AND area_5 = 0 
	AND enabled = 1 
	) UNION
	(
SELECT
	*,
	3 AS temp,
	( st_distance ( point ( longitude, latitude ), point ( 114.32602, 30.55383 ) ) * 111195 ) AS distance 
FROM
	activity_wish_list 
WHERE
	area_3 = 2424 
	AND area_4 != 2425 
	AND area_5 > 0 
	AND enabled = 1 
	) UNION
	(
SELECT
	*,
	4 AS temp,
	( st_distance ( point ( longitude, latitude ), point ( 114.32602, 30.55383 ) ) * 111195 ) AS distance 
FROM
	activity_wish_list 
WHERE
	area_3 = 2424 
	AND area_4 != 2425 
	AND area_5 = 0 
	AND enabled = 1 
	) UNION
	(
SELECT
	*,
	5 AS temp,
	( st_distance ( point ( longitude, latitude ), point ( 114.32602, 30.55383 ) ) * 111195 ) AS distance 
FROM
	activity_wish_list 
WHERE
	area_3 = 2424 
	AND area_4 = 0 
	AND area_5 = 0 
	AND enabled = 1 
ORDER BY
	distance ASC 
	) 
	) AS wish_list 
WHERE
	`enabled` = 1
	AND `deleted_at` IS NULL 
ORDER BY
	`temp` ASC,
	`distance` ASC

http://www.niftyadmin.cn/n/3158731.html

相关文章

Atitit MATLAB 图像处理 经典书籍attilax总结

Atitit MATLAB 图像处理 经典书籍attilax总结 1.1. MATLAB数字图像处理1 1.2. 《MATLAB实用教程(第二版)》((美)穆尔 著)【简介_书评_在线阅读】 - 当当图书.html1 1.3. 数字图像处理(MATLAB版)&#xff08…

企业邮箱如何代理?企业邮箱哪家好用?

企业邮箱如何代理?每个企业邮箱的代理方式不同,我们可以先选择一家邮箱品牌,然后与邮箱服务商进行沟通,然后签订合约之后就能成为代理商了。 如今企业邮箱是企业员工之间互相协助办公的工具,TOM企业邮箱是国际邮箱品牌…

mysql 使用group by报错 sql_mode=only_full_group_by

mysql 开启only_full_group_by模式,该模式下使用mysql老版本的写法取group by分组数据会报错,报错如下: Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘wenming-bj-mtg.comments.organizatio…

TortoiseSVN安装问题总结

目录 1.TortoiseSVN SendRpt.exe not found解决方案 2.TortoiseSVN 的 bin 目录下面没有 svn.exe 1.TortoiseSVN SendRpt.exe not found解决方案 今天在提交项目文档的时候,看到TortoiseSVN可以更新,神经质的想要更新一下,于是乎就去官网下…

webpack 教程

2019独角兽企业重金招聘Python工程师标准>>> https://www.zfanw.com/blog/webpack-tutorial.htmlhttps://www.zfanw.com/blog/webpack-tutorial.html 转载于:https://my.oschina.net/u/612750/blog/809700

外贸邮件营销用什么免费邮件群发平台好?

在做外贸邮件营销的时候,有的人会选择用邮件群发平台来配合工作使用,但是这样做经常导致账号无法发送邮件,这是为什么呢?其实,选择免费的邮箱和免费的邮件群发平台,并不一定适合外贸邮件营销,而…

excel/maatwebsite3.1在标题行上一行添加动态查询数据,并导出多sheet

首先下载安装好maatwebsite3.1包,具体操作自行百度,进入主题 新建导出路由,控制器,导出业务类。在创建路由后,在控制器中做如下处理: public function export_comments(Request $request){//控制器中调用导出业务类的方…

WampServer 下载以及安装问题

WampServer 3.0 下载: http://dl.pconline.com.cn/download/52877-1.html 碰到的问题DDL无法添加,解决方法: fow window 7 http://jingyan.baidu.com/article/4f7d57129fa86e1a201927de.html -> x86 版本和 x64 版本都要安装 http://jin…