从单个表中连接两组结果

时间:2013-05-30 00:58:23

标签: php mysql join union

我有一个广告表,其中包含具有纬度和经度值的特色和非特色广告, 当用户从特定位置远距离搜索广告时,我想在距离所选位置不到500公里的顶部显示特色广告,并且所有其他广告距离无限远,然后是特色列表。

我能够首先显示特色列表到无限距离,然后使用距离函数和按特征子句的顺序显示其他剩余广告。但是如何使特色列表首先显示在500km以下,然后将广告保持在无限远的距离。

我是否需要使用union,还有其他解决方案吗?

来源地点

latitude = -37.814563
longitude = 144.970267
SELECT da.*,( 6371 * acos( cos(radians(144.970267)) * cos(radians(da.loc_lng)) * 
cos(radians(-37.814563) - radians(da.loc_lat)) + sin(radians(144.970267)) *  
sin(radians(da.loc_lng)) )) as distanceSort FROM directory_ads da WHERE da.approved = 1 
AND da.deleted = 0  ORDER BY da.featured DESC, distanceSort ASC

1 个答案:

答案 0 :(得分:1)

您可以使用以下条件的order by子句执行此操作:

order by (case when da.featured > 0 and DistanceSort < 500
               then distance_sort else 500
          end),
         DistanceSort