2017-11-03 12 views
0

異なるテーブルに格納されているポリゴン内のポイントを照会する必要があります。以下のクエリは動作し、作業を行います。MySQL 5.6 - ジオメトリを2回解析しないでください。

SET @b := PolyFromText((SELECT AsText(boundaries.geometry) 
         FROM boundaries_users 
         LEFT JOIN boundaries 
          ON boundaries_users.boundary_id = boundaries.id 
         WHERE boundaries_users.boundary_name = 'name')); 

SELECT 
    id, 
    addr_lon, 
    addr_lat, 
    ST_Contains(@b, POINT(addr_lat, addr_lon)) 
FROM buildings 
WHERE ST_Contains(@b, POINT(addr_lon, addr_lat)); 

ここで境界型ジオメトリはGEOMETRY型です。しかし、どうして私はジオメトリをテキストに変換してからジオメトリに戻さなければならなかったのか分かりません。二重構文解析が削除されると、@bは奇妙なシンボルのセットとして表示され、ST_Containsは任意のポイントに対してFalseを返します。

のMySQL 5.6

+0

そのクエリは単一の境界または複数の境界を返しますか? –

答えて

0

私の推測では、複数のジオメトリに参加しているので、あなたの2つのクエリは、異なる形状を生成します。あなたが実際に同じジオメトリを使用している場合

チェック:

SET @b := With double parsing and without parsing 

が次に発生AsText(@b)ものを参照してください。

関連する問題