为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
梵蒂冈之花 2022-08-09 16:56:13
我想按距离对数据进行排序,但失败了。表位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}
查看完整描述

1 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

现在没事了


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

}


查看完整回答
反对 回复 2022-08-09
  • 1 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信