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

首先我想问一下,曲线表是如何与点表建立关系的?必须有 REDUNDANT Curve_ids 才能将它们与点表映射。

如果可以更改数据库结构,则可以使用 MySQL Geometry,它内置了PointCurve等类。您可以使用内置功能检查两条曲线是否交叉等等。

我发现这个是相关的。

于 2013-02-19T11:29:57.610 回答