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