![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Nieautoryzowani Postów: 34 Pomógł: 1 Dołączył: 22.06.2009 Skąd: Koszalin/Poznań Ostrzeżenie: (0%) ![]() ![]() |
Mam dość skomplikowany problem:)
Otóż mam tabelę 'router'
Sprawa wygląda tak, że jest sobie skrypt który zbiera informacje o fałszywych trasach w routingu. Te informacje są wysyłane z routerów do skryptu co 15 minut. Gdy na jakimś routerze pojawi się fałszywa trasa, jest ona ciągle wysyłana do skryptu zbierającego informacje, ten z kolei dopisuje ją do bazy. Jeśli problem nie zostanie naprawiony z routera będą wciąż płynąć informacje o tej trasie. Nie ma sensu ich zatem dodawać po raz kolejny do bazy dopóki rout_naprawione nie zmieni wartości na '1' (a rout_naprawione zmieni się na '1' w momencie kiedy z tego routera przyjdzie pusta informacja - znaczy brak problemów) . Tyle o programie... Teraz pytanie: "Jak dodać do bazy tylko takie rekordy, których jeszcze nie ma"? Przykładowo w bazie są dwie warotści: (1, 0, 0, '01cwleszka.bp', '195.116.20.124 via 83.16.209.217 dev eth1', 1264118220), (2, 0, 1, '01cwleszka.bp', '87.204.0.82 via 83.16.209.217 dev eth1', 1264118220), Jeden rekord ma flagę naprawione na 0, a drugi na 1 załóżmy że do skryptu przychodzi teraz komunikat o błędzie: '01cwleszka.bp', '195.116.20.124 via 83.16.209.217 dev eth1' '02cwleszka.bp', 'default via 83.16.209.217 dev eth1' Chciałbym dodać do bazy tylko drugi komunikat (pierwszy już jest i ma status 'naprawione' na '0', więc nie potrzebujemy go dodawać). Bawiłem się z WHERE NOT EXIST, ale ciągle dostaję błąd składni. Mam nadzieję że jasno wyjaśniłem o co mi chodzi:) Ten post edytował lorak110786 3.02.2010, 21:46:55 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
http://dev.mysql.com/doc/refman/5.0/en/triggers.html
W triggerze robisz zapytanie do tabeli do której chcesz wstawiać, żeby sprawdzić czy rekord o zadanych wartościach już istnieje. Jeśli tak, to musisz wywołać jakiś błąd żeby przerwać wstawianie (przynajmniej dla MySQL < 5.5). Ja mam w bazie tabelę w której mam teksty typu 'Taki wiersz już istnieje' z kluczem UNIQUE. Żeby przerwać triggera wstawiam do niej np tekst 'Taki wiersz już istnieje'. Do aplikacji leci wtedy błąd nr 1062, który można złapać i z komunikatu błądu wyciągnąć co się stało. Całkiem dobrze to działa jak wstawia się pojedyńcze wiersze. Przy wstawianiu kilku na raz może nie być tak miło... jeden błędny wiersz przerwie pewnie wykonanie całego inserta. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 10:53 |