mysql检查重叠

时间:2016-11-02 13:46:31

标签: mysql sql function overlap

我必须编写一个给出两个A和B系列的函数,如果A元素的任何区域与B元素的任何区域重叠,则返回true,否则返回false。

系列由(粗体为主要)定义:

系列( series_id ,name,base_url,request_number,description)request_number,description:FK(study)

和元素和区域是:

元素( series_id,elem_index
series_id:FK(系列)

区域( series_id,elem_index,x1,y1,x2,y2
series_id,index:FK(element)

到目前为止我尝试的是:

CREATE FUNCTION CheckOverlap(series_id_a, series_id_b,  NUMERIC(20,0)) RETURNS BOOL
BEGIN
    DECLARE overlap BOOL;
    SET overlap = 0;
    SELECT EXISTS(
        SELECT * FROM region WHERE series_id = series_id_a OR series_id = series_id_b
            ...


        ) INTO overlap;
    RETURN overlap;
END;

我基本上认为我需要为每个间隔(x1a,x2a)检查所有其他间隔(x1b,x2b)(因此我正在考虑连接,不确定如何)检查x1a< = x2b AND x2a> = x1b(也检查y1a< = y2b AND y2a> = y2b),因为这是交叉点的条件。

实施例(区):

 id  index   x1     y1     x2  y2
| 0 |    0 |  0   | NULL | 1 | NULL |
| 0 |    1 |  0   | 1    | 0 | 1    |
| 1 |    0 |  0.5 | NULL | 2 | NULL |
| 1 |    1 |  0.5 | 0.5  | 2 | 0.5  |
| 2 |    0 |  0   | NULL | 3 | NULL |

[x1,x2]是其他两个为NULL的间隔,否则为正方形[x1,x2,y1,y2]。如果我给了一个id 0和一个id 1,我会检测到这两个系列中元素的两个重叠,一个在具有id索引对(0,0)和(1,0)的区间之间,另一个在具有id索引对(0,1)和(1,1)的正方形。

编辑:我使用的是MySQL 5.1,它没有ST_OVERLAPS或任何其他漂亮的几何类型/函数。

0 个答案:

没有答案