首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在找饮料时,找最近的酒吧

在找饮料时,找最近的酒吧
EN

Stack Overflow用户
提问于 2014-09-02 10:01:21
回答 2查看 214关注 0票数 4

问题:找一个最近的酒吧供应我要找的饮料。

在这里您可以找到生成的MySQL代码http://pastebin.com/5Uc2ewUW

与此问题交互的API请求将具有以下参数

代码语言:javascript
复制
query, String, ideally the drink name 
lng, double, the starting longitude
lat, double, the starting latitude
range, integer, max distance in meters (with a default value)

查询参数可以选择多个饮料(请考虑搜索"Vodka")。

编写性能良好的SQL查询的好策略是什么?

我不是很擅长,但我的想法是

  • 选择范围内的条形图
  • 从drink__bars中选择bar_id在前面的选择结果中
  • 加入饮料表以获取饮料数据

如何根据距离来设置订单?

任何建议都是非常感谢的!

编辑:谢谢你给出的答案,但它们主要集中在计算距离上,这是涵盖的。我不知道如何根据我到酒吧的距离来点菜(那是饮料)。

就像这个元查询一样

代码语言:javascript
复制
SELECT drink.id, drink.name 
FROM $DATA_POOL
WHERE drink.name LIKE '%MY_QUERY%' 
ORDER BY $ORDER

哪里

  • $DATA_POOL =饮料的子集,它是靠近我的酒吧中的服务器(我已经可以计算出哪个酒吧在我附近)
  • $ORDER =基于API参数lnglat与条形图的距离
EN

回答 2

Stack Overflow用户

发布于 2014-09-02 10:15:15

好吧,删除旧的答案,因为这不是你想要的.

你还需要这个吗?

代码语言:javascript
复制
SELECT
*,
@radius * 2 * ASIN(SQRT(POWER(SIN(( @startlat - abs(b.lat)) * pi() / 180 / 2),2) +
COS( @startlat * pi()/180) * COS(abs(b.lat) * pi() / 180) * POWER(SIN(( @startlng - b.lng) *
pi() / 180 / 2), 2) )) AS distance
FROM 
drinks d
JOIN drink_bars db ON (db.drink_id = d.id)
JOIN bars b ON (b.id_id = db.bar_id)
WHERE d.name LIKE '%mojito%'
ORDER BY distance ASC

因此,查询查找饮料和所有有此饮料的酒吧,并获取按距离排序的数据。

票数 0
EN

Stack Overflow用户

发布于 2014-09-02 11:12:20

所以,您知道如何计算距离,假设我们有一个子查询来实现它。

你所需要做的就是像这样按距离排序:

代码语言:javascript
复制
SELECT d.id, d.name 
FROM 
 drinks d INNER JOIN
 drink_bars db ON db.drink_id = d.id INNER JOIN
 (SELECT id, <formula for distance> as distance FROM bars) b ON b.id = db.bar_id
WHERE d.name = @RequestedDrink AND b.distance < @MaxDistance
ORDER BY b.distance
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25620723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档