Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wykrywanie zakresow liczb
vailor
post 14.05.2005, 10:23:06
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 21.03.2005

Ostrzeżenie: (0%)
-----


Jak mozna wykryc zachodzenie na siebie zakresow liczb.

Mam tablice w ktorej ustalam zakresy numerow dla danych obiektow, przy dodawaniu nowego obiektu musze sprawdzic czy zakres nie pokrywa sie z innym zakresem

np.

tbl.obj='Obiekt1'; tbl.od = 1; tbl.do = 5

wstawiam nastepny obiekt

tbl.obj='Obiekt2'; tbl.od = 3; tbl.do = 5

odrzuca

tbl.obj='Obiekt2'; tbl.od = 6; tbl.do = 9

przyjmuje.


Jedyne co mo przychodzi do glowy to BETWEEN ale to az 4 warunki musial bym zalozyc wiec mysle ze jest prostrzy sposob tylko go nie znam:). Moze jakas funkcja zblizona do OVERLAPS...

Dzieki za wszelkie sugestie
Go to the top of the page
+Quote Post
MStaniszczak
post 14.07.2005, 18:51:54
Post #2





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 3.10.2004

Ostrzeżenie: (0%)
-----


A może tak (po co 4 warunki? może czegoś nie zrozumiałem lub coś źle kombinuje):

Tabela:
  1. CREATE TABLE test (
  2. _object VARCHAR(255),
  3. _od INTEGER NOT NULL,
  4. _do INTEGER NOT NULL
  5. );


Funkcja (trigger):
  1. CREATE OR REPLACE FUNCTION insert_test() RETURNS TRIGGER AS '
  2. DECLARE
  3. __object test._object%TYPE;
  4. BEGIN SELECT
  5. INTO __object _object
  6. FROM test WHERE (NEW._od BETWEEN _od AND _do) OR (NEW._do BETWEEN _od AND _do);
  7. IF NOT FOUND THEN
  8. RETURN NEW;
  9. ELSE
  10. RAISE EXCEPTION ''Zakres pokrywa się!'';
  11. END IF;
  12. END;
  13. ' LANGUAGE 'plpgsql';


Tworzenie wyzwalacza na instrukcje instert oraz update:
  1. CREATE TRIGGER trig_insert_test BEFORE INSERT OR UPDATE ON test FOR EACH ROW
  2. EXECUTE PROCEDURE insert_test();


Testowałem na:
  1. INSERT
  2. INTO test VALUES ('Object1', 1, 5); --OK
  3. INSERT
  4. INTO test VALUES ('Object2', 3, 5); --ERROR: Zakres pokrywa się!
  5. INSERT
  6. INTO test VALUES ('Object3', 3, 9); --ERROR: Zakres pokrywa się!
  7. INSERT
  8. INTO test VALUES ('Object4', 6, 9); --OK


Pozdrawiam
Marcin Staniszczak
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 01:41