我必须要求得到我周围的商店。我知道如何在MySQL中发出请求,但我不知道如何使用GORM进行请求,以便充分利用语法。
这是MySQL中的查询
SELECT
id,
(
6371 *
acos(cos(radians(37)) *
cos(radians(lat)) *
cos(radians(lng) -
radians(-122)) +
sin(radians(37)) *
sin(radians(lat )))
) AS distance
FROM shops
HAVING distance < 25
ORDER BY distance LIMIT 0, 20;
这是我在GORM中的查询
type req struct {
ID string `json:"id"`
Distance string `json:"distance"`
}
re := []res{}
sql := fmt.Sprintf("SELECT id, (6371 * acos(cos(radians(%v)) * cos(radians(lat)) * cos(radians(lng) - radians(%v)) + sin(radians(%v)) * sin(radians(lat)))) AS distance FROM shops WHERE active=1 HAVING distance < %v ORDER BY distance LIMIT 0, 20;", lat, lng, lat, dst)
db.Raw(sql).Rows()
defer rows.Close()
for rows.Next() {
r := res{}
rows.Scan(&r.ID)
re = append(re, r)
}
可以,我有商店清单,但是我必须在同一通话中添加类别(Preload("Categories")
许多商店)。
我知道如何通过两次呼叫做到这一点,一旦我将商店的ID设置在所需的距离内,我就会查找带有类别的IDS商店,但是我想这样做是为了在同一查询中的效果。