7

我正在使用以下查询来选择与指定纬度和经度最近的行。然后按距离对结果进行排序,返回所选数据集中最近的行。

但是,我想然后按expiry_date字段对返回的最近的行进行排序以对该数据集进行排序,以便我将最快的结束(最近的到期日期)在顶部和最远的底部。

请你能告诉我我该怎么做吗?

SELECT * , ( 6371 * ACOS( COS( RADIANS( latitude ) ) * COS( RADIANS( 51.61062 ) ) * COS( RADIANS( - 0.236952 ) - RADIANS( longitude ) ) + SIN( RADIANS( latitude ) ) * SIN( RADIANS( 51.61062 ) ) ) ) AS distance
FROM  `questions` 
WHERE  `expiry_date` > 
CURRENT_TIMESTAMP HAVING distance <=50000
ORDER BY distance
LIMIT 0 , 15
4

2 回答 2

36

ORDER BY可以是逗号分隔的列表。只需按出现顺序列出它们:

SELECT * , ( 6371 * ACOS( COS( RADIANS( latitude ) ) * COS( RADIANS( 51.61062 ) ) * COS( RADIANS( - 0.236952 ) - RADIANS( longitude ) ) + SIN( RADIANS( latitude ) ) * SIN( RADIANS( 51.61062 ) ) ) ) AS distance
FROM  `questions` 
WHERE  `expiry_date` > 
CURRENT_TIMESTAMP HAVING distance <=50000
ORDER BY distance
, expiry_date DESC
LIMIT 0 , 15
于 2012-08-21T20:31:13.310 回答
0

你需要一个子查询:

select t.*
from (<your query here>) t
order by expiry_date desc
于 2012-08-21T20:32:10.410 回答