从db查询lat,long并显示范围内的所有记录

时间:2016-05-09 11:56:08

标签: php mysql

我正在研究所有用户的程度存储纬度和经度(使用mysql和php)。

我需要查询并显示100公里范围内的用户列表。

我遇到以下问题

  1. Db设计可以获得更快的结果。我的数据库结构好吗?如果我想要更快的输出将指数拉特和长期工作?在下面的情况下我应该使用Innodb或myisam引擎吗?如果我们有数十万条记录,那么在上述案例中查询结果将需要很长时间
  2. 我的sql表结构:

    $ source ~/.zshrc
    
    1. 是否有直接的sql函数或代码可以让所有用户获得指定范围?我用谷歌搜索,发现其中大部分使用cos。这是唯一的方法吗?
    2. 提供输出的查询,但速度很慢:

      id(int 11 primary key auto increment) | lat(varchar) | long(varchar)
      

1 个答案:

答案 0 :(得分:1)

如果您使用MySQL> = 5.6.1,则可以使用函数st_distance,请参阅http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-object-shapes.html#function_st-distance

需要使用POINT作为坐标的类型。