在mysql中使用union和order by子句

我想在MySQL查询中通过Union使用order。我正在根据基于距离的表格从不同的标准中获取不同类型的记录,该表格基于在我的网站上进行搜索的距离。第一个选择查询返回与精确位置搜索有关的数据。第二个选择查询返回与距搜索位置5公里以内的距离有关的数据。第三个选择查询返回与距搜索位置5-15公里之内的距离有关的数据。

然后,我使用union合并所有结果,并在带有分页的页面上显示。在适当的标题下,例如“精确搜索结果”“ 5公里内的结果”

现在我想基于id或add_date对结果进行排序。但是,当我在查询末尾添加order by子句时(query1联合查询2联合查询3由add_date排序)。它对所有结果进行排序。但是我想要的是应该在每个标题下进行排序。


临摹微笑
浏览 511回答 3
3回答

紫衣仙女

您可以通过为每个选择添加一个名为rank的伪列来执行此操作,在按照其他条件进行排序之前,可以首先对其进行排序,例如:select *from (&nbsp; &nbsp; select 1 as Rank, id, add_date from Table&nbsp;&nbsp; &nbsp; union all&nbsp; &nbsp; select 2 as Rank, id, add_date from Table where distance < 5&nbsp; &nbsp; union all&nbsp; &nbsp; select 3 as Rank, id, add_date from Table where distance between 5 and 15) aorder by rank, id, add_date desc

神不在的星期二

您可以使用子查询来执行此操作:select * from (select values1 from table1 order by orderby1) as aunion allselect * from (select values2 from table2 order by orderby2) as b

陪伴而非守候

联合查询只能有一个主ORDER BY子句IIRC。为了得到这一点,在每个查询组成更大的UNION查询,添加一个字段,将在是你的一个字段排序UNION的ORDER BY。例如,您可能会遇到类似SELECT field1, field2, '1' AS union_sortUNION SELECT field1, field2, '2' AS union_sortUNION SELECT field1, field2, '3' AS union_sortORDER BY union_sort该union_sort字段可以是您可能要排序的任何内容。在此示例中,恰好是将结果从第一个表放在第一位,将第二个表放在第二位,依此类推。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL