やりたいこと
item
テーブルがあり、
そこには、id
、add_lat
、add_lng
、add_city
というカラムが存在するのですが、
以下のような異なる条件で取得をして、重複するレコードを除外するという処理をやりたいのですが、詰まってしまい質問させてください。
やったこと
sql
1SELECT *,(6371 * ACOS(COS(RADIANS(35.694003)) * COS(RADIANS(add_lat)) * COS(RADIANS(add_long) - RADIANS(139.753595)) + SIN(RADIANS(35.694003)) * SIN(RADIANS(add_lat)))) AS distance FROM item WHERE state = 1 HAVING distance <= 25 ORDER BY distance;
以上のSQLで緯度35.694003
、経度139.753595
から半径25km内の距離にあるレコードを抽出出来ます。仮にAとします。
sql
1SELECT * FROM item WHERE state = 1 AND add_city = '千代田区';
上記で千代田区内に属するレコードを取得できます。仮にBとします
イメージとしては、Aのレコード+Bのレコードで重複したidを持つレコードを除外したいと考えています。
UNIONを使って以下のようにしてみたけど、正しい値が出力されないです。
sql
1(SELECT *,(6371 * ACOS(COS(RADIANS(35.694003)) * COS(RADIANS(add_lat)) * COS(RADIANS(add_long) - RADIANS(139.753595)) + SIN(RADIANS(35.694003)) * SIN(RADIANS(add_lat)))) AS distance FROM item WHERE state = 1 HAVING distance <= 25 ORDER BY distance) 2UNION 3(SELECT *,(6371 * ACOS(COS(RADIANS(35.694003)) * COS(RADIANS(add_lat)) * COS(RADIANS(add_long) - RADIANS(139.753595)) + SIN(RADIANS(35.694003)) * SIN(RADIANS(add_lat)))) AS distance FROM item WHERE state = 1 AND add_city = '千代田区');
難解な処理をしようとしているため、説明が難しく、ツッコミをいただけましたら、補足をくわえさせていただきます。
補足
Bでは千代田区内のみを抽出するのですが、Aでは基準点から半径25km以内のレコードも取得しているので、その差分をBに加えるという処理を行いたいです
回答3件
あなたの回答
tips
プレビュー