我正在构建与“商店定位器”应用程序极为相似的东西。这通过 lat 和 lon 查询并生成半径内最近的位置。这工作得很好,但我的数据库包括位置和子位置。我希望能够限制用户按位置获得的不同结果,同时仍然查询和获取有关子位置的所有信息..
假设这是我在应用不同选择之前的结果集:
| Location | Sub-Location |
+----------+--------------+
| Alpha | Alpha North |
| Alpha | Alpha East |
| Alpha | Alpha West |
| Beta | Beta West |
| Gamma | Gamma North |
| Gamma | Gamma South |
| Delta | Delta West |
| Delta | Delta West 2 |
我需要一种方法来指定一个范围 - 比如说 2 - 并产生以下结果集:
| Location | Sub-Location |
+----------+--------------+
| Alpha | Alpha North |
| Alpha | Alpha East |
| Alpha | Alpha West |
| Beta | Beta West |
这将等效于为用户生成“两个最近”位置。在谷歌搜索和搜索 Stack Overflow 的建议和类似问题之后,我找不到任何符合此描述的内容。
有人介意为我指出正确的方向,或者提供一个可以做到这一点的查询示例吗?
编辑:这是我正在运行的查询。这有点像怪物。还包括纬度/经度查询。
SELECT *
FROM(
(SELECT * FROM locationstable JOIN
(SELECT DISTINCT location,
( 3959 * acos( cos( radians(47.4972680) ) * cos( radians( lat ) )
* cos( radians( lon ) - radians(-122.2564740) ) + sin( radians( 47.4972680) )
* sin( radians( lat ) ) ) ) AS distance
FROM locationstable
HAVING distance < 1
LIMIT 0, 5)
locationstable ON locationstable.location = location
)) locationstable
LEFT JOIN informations
ON substring(locationstable.locationsublocation, 4) = informations.storeinformations