Cześć,
Mam projekt w qgis w którym mam warstwy obszary(poligon) i promocje( niegometryczna). Chciałbym z poziomu qgis mieć w miare wygodną możliwość przypisywania promocji do obszarów. Problem w tym, że do każdego obszaru może być kilka promocji, czyli relacja N;n jeżeli dobrze rozumiem. Warstwy stoją na postgresie. Utworzyłem tabele złączeniowa id, id_obszaru, id_promocji, ale ręczne wpisywanie kombinacji mnie nie satysfakcjonuje. Fajnie by było, gdyby dało sie zanaznaczyć w QGis na mapie obszary i wtedy do nich dopisywać promocje.
Rozwiązaniem było stworzenie nowej kolumny dodane_promocje oraz triggera, który wstawiał w tabelę złączeniową id obszaru oraz wartość z kolumny dodane_promocje w odpowiednie miejsca. Z poziomu qgis możemy multiedycją wprowadzać zmiany do wielu obszarów i przypisywać im jeden atrybut. Analogicznie działa usuwanie. Dodajemy kolumnę usuwane_promocje i tam wpisujemy id promocji do usunięcia z tego obszaru.
CREATE OR REPLACE FUNCTION tmp_geoinfo.obszary_cenowe_promocje()
RETURNS trigger AS
$BODY$
BEGIN
if new.dodane_promocje <> old.dodane_promocje then
insert into tmp_geoinfo.oc_promocje_obszary_cenowe( id_promocji,id_obszaru)
values (new.dodane_promocje,old.id);
end if;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION tmp_geoinfo.obszary_cenowe_promocje()
OWNER TO wkolosa;
CREATE TRIGGER trigger_obszary_cenowe_promocje
BEFORE INSERT OR UPDATE
ON tmp_geoinfo.obszary_cenowe_v3
FOR EACH ROW
EXECUTE PROCEDURE tmp_geoinfo.obszary_cenowe_promocje();
Aby nie duplikować wartości obszar-promocja na tabelę z promocje_uslugi dodajemy ograniczenie na unikalny concat(id_promocji,id_obszaru)
który tworzy się triggerem
wojkol1 napisał(a):
Cześć,
Mam projekt w qgis w którym mam warstwy obszary(poligon) i promocje( niegometryczna). Chciałbym z poziomu qgis mieć w miare wygodną możliwość przypisywania promocji do obszarów. Problem w tym, że do każdego obszaru może być kilka promocji, czyli relacja N;n jeżeli dobrze rozumiem. Warstwy stoją na postgresie. Utworzyłem tabele złączeniowa id, id_obszaru, id_promocji, ale ręczne wpisywanie kombinacji mnie nie satysfakcjonuje. Fajnie by było, gdyby dało sie zanaznaczyć w QGis na mapie obszary i wtedy do nich dopisywać promocje.
Przyznam się, że nie zrozumiałem problemu. Wydawało mi się, że narzędzia klasy GIS mają możliwość:
a) wyboru obszaru
b) importu danych i powiązania ich z wybranym obszarem za pomocą funkcji JOIN
np. mamy plik CSV np. promocje.csv, a w nim atrybuty: Promocja,IdObszaru, DanePromocji, Od, Do.
Procedura działania, np. tu: https://tilemill-project.github.io/tilemill/docs/guides/joining-data/
Chyba, że nie o to chodziło :)
W każdym razie +1 za powrót na forum i podzielenie się rozwiązaniem problemu :)
@wojkol1: A to ci działa? bo masz warunek if new.dodane_promocje <> old.dodane_promocje then
, a w on insert
nie ma obiektu old
.
Marcin.Miga napisał(a):
@wojkol1: A to ci działa? bo masz warunek
if new.dodane_promocje <> old.dodane_promocje then
, a won insert
nie ma obiektuold
.
działa, gdy nie ma żadnego rekordu w dodane_promocje oraz wtedy gdy ten rekord aktualizuję. Tylko to jest trochę słabe bo w tabeli cały czas wiszą mi promocje, które wprowadzałem ostatnio
wojkol1 napisał(a):
Marcin.Miga napisał(a):
@wojkol1: A to ci działa? bo masz warunek
if new.dodane_promocje <> old.dodane_promocje then
, a won insert
nie ma obiektuold
.działa, gdy nie ma żadnego rekordu w dodane_promocje oraz wtedy gdy ten rekord aktualizuję. Tylko to jest trochę słabe bo w tabeli cały czas wiszą mi promocje, które wprowadzałem ostatnio
jednak tylko myślałem, że działa, przy wartości null nie robi inserta