限制MySQL中的不同值

7 mysql distinct limit

我正在构建一个与"商店定位器"应用程序非常相似的东西.这通过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 |
Run Code Online (Sandbox Code Playgroud)

我需要一种方法来指定范围 - 比方说2 - 并生成以下结果集:

| Location | Sub-Location |
+----------+--------------+
| Alpha    | Alpha North  |
| Alpha    | Alpha East   |
| Alpha    | Alpha West   |
| Beta     | Beta West    |
Run Code Online (Sandbox Code Playgroud)

这将是向用户生成"最近的两个"位置的有效等价物.经过一段时间的谷歌搜索和搜索Stack Overflow的建议和类似的问题,我找不到符合此描述的任何内容.

有人会介意我指出正确的方向,或者提供一个可以做到这一点的查询示例吗?

编辑:这是我正在运行的查询.这有点像怪物; 还包括lat/lon查询.

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
Run Code Online (Sandbox Code Playgroud)

par*_*nas 7

子查询怎么样?

SELECT * FROM sometable WHERE Location IN (SELECT DISTINCT Location FROM sometable LIMIT 2); 
Run Code Online (Sandbox Code Playgroud)

  • 啊,所以问题在于"IN",而不是在子查询中.尝试"SELECT*FROM sometable JOIN(SELECT DISTINCT Location FROM sometable LIMIT 2)loc on sometable.Location = loc.Location; (3认同)