3

私は私の実際のケースをより単純にします。

ケース:

ポイントで渡される複数の曲線があり、それぞれに最後の1ポイントがあります。データベースで曲線の最大のpoint_order値として表される最後のポイント。

特定のポイントを通過し、同じ最終ポイント(同じpoint_id)を持つ曲線を見つける必要があります

ケース(表):

ポイントテーブル:

point_id|x|y

編集:

Curve_pointsテーブルの例-同じpoint_id=80で同じ最終点を持つすべての曲線を検索します。

id|curve_id|point_id|point_order
  |119     |6       |12
  |119     |80      |9
  |119     |1000    |1
  |76      |80      |7
  |76      |6       |9
  |76      |2       |2
  |90      |80      |7
  |90      |6       |9
  |90      |99      |15

出力結果は次のようになります。

  |curve_id|
  |119     | 
  |76      |

曲線119,76は同じ最終点=6を持ち、同じ点80を持っているからです。曲線90は、点6が彼の最終点ではないからではありません。

psedocode関数-同じ最終ポイントを選択するためのコードを追加する必要があります

function findCurvesForSamePointAndSameFinalPoint(pointID){
    query="SELECT curve_id FROM curve INNER JOIN point GROUP BY curve_id HAVING point_id="+pointID+";";
    return getDATABASEResult(query);  
}

Edit2:テストするデータを含むオンラインSQL:http ://sqlfiddle.com/#!2/59e9f/1 (そこに存在するクエリは機能しません)

ありがとう

4

2 に答える 2

1

私がそれを正しく持っているなら。それは次のようなものです:

SQLFiddle デモ

select distinct c1.curve_id,(select point_id from curve t1
       where t1.curve_id=c1.curve_id 
       order by point_order desc 
       limit 1)
TheLastPoint

from curve c1
join curve c2 on
(select point_id from curve t1
       where t1.curve_id=c1.curve_id 
       order by point_order desc 
       limit 1)
=
(select point_id from curve t2 
       where t2.curve_id=c2.curve_id 
       order by point_order desc 
       limit 1)
And c1.curve_id<>c2.curve_id

where c1.curve_id in (select curve_id from curve where point_id=80)
      and 
      c2.curve_id in (select curve_id from curve where point_id=80)
order by TheLastPoint,c1.curve_id
于 2013-02-19T11:17:14.633 に答える
0

最初に聞きたいのは、カーブテーブルがポイントテーブルとの関係をどのように作成しているかということです。ポイントテーブルにマップするには、REDUNDANTCurve_idsが必要です。

データベース構造を変更できる場合は、PointCurveなどのクラスが組み込まれているMySQLGeometryを使用できます。組み込みの機能を使用して、2つの曲線が交差するかどうかを確認できます。

私はこれが関連しているのを見つけました。

于 2013-02-19T11:29:57.610 に答える