0

私は非常に大きなテーブルを持っています(数百万レコード)。表の列は、Aが現在次のようになっていることを示しています:id、road name、lat、lonここで、idは自動増分PKです。

現在、各道路はいくつかの(lat、lon)の組み合わせにマップされているため、1つの道路名に複数のエントリをテーブルに含めることができます。

私がやろうとしているのは、主キーとして道路名を作成してから、lat列とlon列を削除することです。次に、道路を表す(lat-lon)ポイントのリストを含むGeometryタイプの列を追加します。

これはjava+mysqlで簡単に実行できますが、ネストされたクエリをいくつか作成することでこれを簡単に実行できる方法があるかどうか疑問に思っていました。基本的に、私はすでにデータが入力されたテーブルAと別のテーブルBを持っており、道路名はPKで、2番目の列はGeometryタイプです。私が欲しいのは、一意の道路名ごとにすべての緯度と経度をジオメトリポイントリストに結合し、テーブルBに挿入することです。これをmysqlで実行することは可能ですか?

注:これは単なる例であり、実際のシナリオではないため、道路名の一意性について心配する必要はありません。ありがとう!

更新:concat/group_concat関数は文字列を返します。私の列タイプはGeometryなので、この文字列をMySQL Spatial ExtensionのGeomFromText()空間関数に渡して、ジオメトリ形式で取得します。

4

2 に答える 2

2

これにより、ジオメトリ列がコンマで区切られた<lat>x<lon>ペアのリストで埋められます。

SELECT road_name, GROUP_CONCAT(CONCAT(lat,'x',lon)) geometry
FROM road_table
GROUP BY road_name
于 2012-08-30T20:40:39.743 に答える
1

私は次のクエリがあなたが望むことをするだろうと思います:

select RoadName,
       group_concat(RoadPoint order by id separator ',') as geometry
from (select A.*,
             concat('(', lat, ',', long, ')') as RoadPoint
      from A
     ) t
group by RoadName

これにより、ポイントがAに表示される順序で、リストがコンマ区切りのサブリストとして生成されます。

于 2012-08-30T20:38:49.560 に答える