为了账号安全,请及时绑定邮箱和手机立即绑定

在mysql中使用union和order by子句

在mysql中使用union和order by子句

临摹微笑 2019-10-17 16:24:46
我想在MySQL查询中通过Union使用order。我正在根据基于距离的表格从不同的标准中获取不同类型的记录,该表格基于在我的网站上进行搜索的距离。第一个选择查询返回与精确位置搜索有关的数据。第二个选择查询返回与距搜索位置5公里以内的距离有关的数据。第三个选择查询返回与距搜索位置5-15公里之内的距离有关的数据。然后,我使用union合并所有结果,并在带有分页的页面上显示。在适当的标题下,例如“精确搜索结果”,“ 5公里内的结果”等现在我想基于id或add_date对结果进行排序。但是,当我在查询末尾添加order by子句时(query1联合查询2联合查询3由add_date排序)。它对所有结果进行排序。但是我想要的是应该在每个标题下进行排序。
查看完整描述

3 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

您可以通过为每个选择添加一个名为rank的伪列来执行此操作,在按照其他条件进行排序之前,可以首先对其进行排序,例如:


select *

from (

    select 1 as Rank, id, add_date from Table 

    union all

    select 2 as Rank, id, add_date from Table where distance < 5

    union all

    select 3 as Rank, id, add_date from Table where distance between 5 and 15

) a

order by rank, id, add_date desc


查看完整回答
反对 回复 2019-10-17
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

您可以使用子查询来执行此操作:


select * from (select values1 from table1 order by orderby1) as a

union all

select * from (select values2 from table2 order by orderby2) as b


查看完整回答
反对 回复 2019-10-17
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

联合查询只能有一个主ORDER BY子句IIRC。为了得到这一点,在每个查询组成更大的UNION查询,添加一个字段,将在是你的一个字段排序UNION的ORDER BY。


例如,您可能会遇到类似


SELECT field1, field2, '1' AS union_sort

UNION SELECT field1, field2, '2' AS union_sort

UNION SELECT field1, field2, '3' AS union_sort

ORDER BY union_sort

该union_sort字段可以是您可能要排序的任何内容。在此示例中,恰好是将结果从第一个表放在第一位,将第二个表放在第二位,依此类推。


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 510 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信