SQLite - пользовательская функция для работы с реляционными данными - PullRequest
1 голос
/ 06 февраля 2012

База данных SQLite, над которой я работаю, хранит именованные полигоны, каждый из которых состоит из нескольких точек, таблицы - это «полигоны» (id, name) и «точки» (x, y, polygon_id).Теперь, учитывая координаты точки, мне нужно запросить все полигоны, которые пересекаются точкой.Мое текущее решение (см. Ниже) очень медленное, помогите мне оптимизировать его

$dbh->sqliteCreateFunction('mgPoint', 'sqlite_point', 2);
function sqlite_point($sid, $pt){
    $points = query("SELECT x,y FROM points WHERE polygon_id = $sid")->all();
    return is_point_in_polygon($pt, $points);
}
//... and the usage ...
query("SELECT * FROM polygon s WHERE mgPoint(s.id, :p)", array('p' => $pt));
...