2

緯度/経度の座標ペアの距離内にある場所を検索するクエリがあります。値が入力された例を次に示しlatますlng

SELECT 
    `id`, 
    ( 3959 * acos( cos( radians('39.8657112') ) * cos( radians( `lat` ) ) * cos( radians( `lng` ) - radians('-86.1478729') ) + sin( radians('39.8657112') ) * sin( radians( `lat` ) ) ) ) AS `distance` 
FROM `locations` 
HAVING `distance` < 0.100000

私の問題は、これを複合クエリで使用して、別のクエリの結果をフィルタリングしたいということです。例えば:

SELECT * FROM `tickets` WHERE `location_id` IN ( <distance query goes here> );

ただし、距離クエリは 2 つの列 (iddistance) を返すため、2 番目のクエリはカーディナリティ違反で失敗します。ERROR 1241 (21000): Operand should contain 1 column(s)

distances のリストのみが返されるように、クエリから列を返さないように MySQL に指示できる方法はありますidか?

4

1 に答える 1

3

一般的な応答は、距離クエリと同じクエリを作成することですが、select 句から距離列を削除します。

SELECT `id` 
FROM `locations` 
WHERE ( 3959 * acos( cos( radians('39.8657112') ) * cos( radians( `lat` ) ) * cos( radians( `lng` ) - radians('-86.1478729') ) + sin( radians('39.8657112') ) * sin( radians( `lat` ) ) ) ) < 0.100000

ほら、計算全体をWHERE句に移動し、それをリミッターに対してテストします。

于 2013-06-17T21:22:43.707 に答える