8

「店舗検索」アプリに非常に似たものを構築しています。これは緯度と経度でクエリを実行し、半径内の最も近い場所を生成します。これは問題なく機能していますが、私のデータベースには場所とサブ場所が含まれています。サブロケーションに関するすべての情報を照会して取得しながら、ユーザーがロケーションごとに取得する個別の結果を制限できるようにしたいと考えています..

これが、個別の選択が適用される前の結果セットだとします。

| 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    |

これは、ユーザーに「最も近い 2 つの」場所を生成するのと同じ効果があります。グーグルとスタックオーバーフローの提案と同様の質問を精査した後、この説明に合ったものを見つけることができません.

誰かが私を正しい方向に向けてくれませんか、それともこれを行うことができるクエリの例を提供してくれますか?

編集:これは私が実行しているクエリです。ちょっとしたモンスターです。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
4

1 に答える 1

7

サブクエリはどうですか?

SELECT * FROM sometable WHERE Location IN (SELECT DISTINCT Location FROM sometable LIMIT 2); 
于 2013-04-27T23:24:11.730 に答える