Уведомления

Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Апрель 30, 2017 00:08:58

axinax
Зарегистрирован: 2017-01-06
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

SQL запрос на вставку

Может кто подскажет, три дня бьюсь, не выходит каменная чаша.
Суть такая.В таблице points должны помещаться точки. Поля таблицы: id, proj_id, point_num, geom. Proj_id это номер проекта, в одном проекте точки, и номера точек должны быть уникальны. Номера точек желательно должны идти подряд начиная с 1.
Пишу триггер для автоматического добавления. Сейчас использую промежуточную таблицу с со всеми точками allpoints в которую записываю точки (вершины полигонов), в ней могут быть повторы. Например, пересечение двух полигонов содержат часть точек одного и другого полигонов.
Про unique знаю, но хотелось бы, чтобы точки были уникальны только для одного проекта, если в другой проект входят те же полигоны, то должно быть свое облако точек, в во-вторых поле пространственных данных создается немного по другому и там нет ограничения unique/
Пока написал такой триггер.

 CREATE TRIGGER insert_allpoints
AFTER INSERT ON "allpoints"
begin
insert into points (proj_id, point_num, geom)
select NEW.proj_id, 
ifnull (max(points.point_num),0)+tablen.n, NEW.geom
from allpoints, points, tablen
where NEW.geom not in (select points.geom from points where points.proj_id= NEW.proj_id);
end
tablen - таблица счетчик. Этот триггер не работает нормально. Во-первых не работает при отсутствии точек в points, но это решается. Но он не отбирает уникальные значения. Как организовать счетчик с инкреминацией, чтобы номер точки увеличивался на 1? База данных sqlite, точнее spatialite

Отредактировано axinax (Апрель 30, 2017 00:12:04)

Офлайн

#2 Апрель 30, 2017 10:13:07

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1927
Репутация: +  71  -
Профиль   Отправить e-mail  

SQL запрос на вставку

Вот убейте не пойму, зачем вы все это городите. Т.с. мотивационная часть не раскрыта. Хотите нумерацию точек в проекте? Ну так нумеруйте их при выборке, хоть через оконную функцию, хоть уже на клиенте. Упорядоченность то вам id гарантирует. Кстати, unique может быть и композитным.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Апрель 30, 2017 14:17:15

axinax
Зарегистрирован: 2017-01-06
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

SQL запрос на вставку

Да может быть непонятно. Смотрите, есть фактические границы двух смежных участков. Мне надо вывести таблицы с координатами точек границы. Если точки первого участка пронумеруем 1,2,3,4, а с участком 2 участок 1 граничит по линии 2-3, то нумерация точек границ участка 2 должна быть 2, 5, 6, 3. Вот для этого и нужна таблица с точками и номерами. По идее при выводе координат точек участка номера точек должны выбираться из таблицы points. Еще ситуация усложняется тем, что мы вначале не знаем общее количество участков: поиск пересечения, сравнения и тд. осуществляется автоматически через триггеры, к тому же пользователь в процессе может добавить участки, например проект установления границ или проект раздела участка.
Про композитный unique не знал, можно по подробнее?
А понял, надо сделать составной индекс. Попробую.

Отредактировано axinax (Апрель 30, 2017 14:29:56)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version