Otóż mam tabelę 'router'
CREATE TABLE IF NOT EXISTS `router` ( `rout_id` int(11) NOT NULL AUTO_INCREMENT, `rout_aktywne` int(11) NOT NULL, `rout_naprawione` int(11) NOT NULL, `rout_host` varchar(20) NOT NULL, `rout_komunikat` varchar(60) NOT NULL, `rout_time` int(11) NOT NULL, UNIQUE KEY `rout_id` (`rout_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=12 ;
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:)