【问题标题】:Limit distinct values in MySQL限制 MySQL 中的不同值
【发布时间】:2013-04-27 23:20:27
【问题描述】:

我正在构建与“商店定位器”应用极为相似的东西。这通过 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

【问题讨论】:

  • 忽略子位置以查找最近的两个位置,然后将结果连接到您的位置表以获取这些位置的所有子位置。

标签: mysql limit distinct


【解决方案1】:

子查询呢?

SELECT * FROM sometable WHERE Location IN (SELECT DISTINCT Location FROM sometable LIMIT 2); 

【讨论】:

  • 是的 "IN()" 当然,谢谢。至于“ORDER BY”——子查询本身只是一个例子,对于实际应用程序会有所不同。
  • 不,仅凭联接就无法做到这一点(至少我不知道:)。你的mysql版本是多少?
  • #1235 - This version of MySQL doesn't yet support 'LIMIT &amp; IN/ALL/ANY/SOME subquery'
  • 啊,所以问题出在“IN”中,而不是在子查询中。尝试“SELECT * FROM sometable JOIN (SELECT DISTINCT Location FROM sometable LIMIT 2) loc ON sometable.Location = loc.Location;
  • 是的,您的查询让我想起了 lisp(所有括号:)。问题出在这一行:“locationstable ON locationstable.location = location”。到目前为止,您已经有了名为 locationstable 的查询的两个部分。尝试将其替换为:“locationstable2 ON locationstable2.location = locationstable.location”。
猜你喜欢
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 2023-03-30
  • 2019-10-21
  • 2011-09-16
  • 1970-01-01
相关资源
最近更新 更多