我想按距离对数据进行排序但失败了

I want to sort data by distance but failed

我想按距离对数据进行排序但失败了。

Table 个地方

type Place struct 
{
    gorm.Model
    CountyName    string 
    Name          string  
    Address       string 
    ServiceTime   string 
    Phone         string  
    BusinessScope string  
    Remark        string 
    Lng           float64
    Lat           float64 
    Type          uint 
}

这个有效:

func PlaceList(placeType, fieldName, fieldValue string, pageNum, pageSize int) (places []Place, err error) {
    result := DB.Scopes(Paginate(pageNum, pageSize)).Scopes(Filter(placeType, fieldName, fieldValue)).Find(&places)
    return places, result.Error
}

我尝试对它进行排序,但它不起作用:

func PlaceList(currentLng, currentLat, placeType, fieldName, fieldValue string, pageNum, pageSize int) (places []Place, err error) {
    var distance = "places.lng, places.lat, power((%s - places.lng),2) + power((%s - places.lat),2) as distance"
    var selectDistance  = fmt.Sprintf(distance, currentLng, currentLat)
    result := DB.Table("places").Select(selectDistance).Scopes(Paginate(pageNum, pageSize)).Scopes(Filter(placeType, fieldName, fieldValue)).Order("distance").Find(&places)
    return places, result.Error
}

感谢帮助我

现在可以了

func PlaceList(currentLng, currentLat, placeType, fieldName, fieldValue string, pageNum, pageSize int) (places []Place, err error) {
    var distance = "*, power((%s - places.lng),2) + power((%s - places.lat),2) as distance"
    var selectDistance = fmt.Sprintf(distance, currentLng, currentLat)
    result := DB.Debug().Table("places").Select(selectDistance).Scopes(Paginate(pageNum, pageSize)).Scopes(Filter(placeType, fieldName, fieldValue)).Order("distance").Find(&places)
    return places, result.Error
}