Я где-то недавно видел подобную тему в этом форуме, но че-то не нашел.
Вообщем, вопрос таков:
Как (любым способом, лучше - все...) сделать запрос на вставку записи при
каком-то условии. Т.е. Если так-то то это вставить надо, иначе - нет.
Я PL еще не изучал - без него обхожусь: если это с помощью него можно,
то напишите просто пример кода.Тупо сначало селектом проверять - идиотизм.
Типичная ситуация - один процесс проверил, решил - надо всталять, а
другой тоже самое сделал; и оба вставили...Давно, где-то видел в доках что-то подобное, но забыл, т.к. использовать не приходилось.
Напомните, плиз.P.S. Да! И не факт, что мускул, постгресс, оракл... - стандартное решение желательно.
>Я где-то недавно видел подобную тему в этом форуме, но че-то не
>нашел.
>Вообщем, вопрос таков:
>Как (любым способом, лучше - все...) сделать запрос на вставку записи при
>
>каком-то условии. Т.е. Если так-то то это вставить надо, иначе - нет.есть такая штука IF (в mysql точно есть), вроде поддерживается в SQL 92
>есть такая штука IF (в mysql точно есть), вроде поддерживается в SQL
>92не-е, это не то.
IF EXISTS DROP .... и так далее это не то.
Я нашел ужел сам - REPLACE.
Но только, в не понял по докам - не уж-то он если нашел такую же запись будет
ее удалять и заново вставлять? Бред какой-то получается.И еще:
Вот такая таблица:
CREATE TABLE `drv_browsers` (
`browser_id` int(11) NOT NULL auto_increment,
`name` varchar(64) NOT NULL default '',
PRIMARY KEY (`browser_id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;Это для ведения статистических логов о авторизациях и на каких браузерах юзеры
входили в веб-систему...Соответственно, если движок встречает незнакомый браузер ($_SERVER['HTTP_USER_AGENT']),
то втыкает в эту таблицу на лету.
Запрос - "REPLACE `drv_browsers` (`name`) VALUES('bla-bla')"Я тестил в phpMyAdmin 2.6.4-pl4, MySQL 5.0.17. Так вот:
После исполнения запроса с этим реплейсом он пишет там у себя таку инфу:
Inserted rows: 2
Inserted row id: 33 (Query took 0.0004 sec)Вопрос:
1. Почему Inserted rows: 2, а не 1 и вообще не 0, т.к. в принципе уже и не надо
было к этому времени ни чего вставлять - такая запись уже была в таблице.
2. Почему row id увеличивается при каждом новом исполнении запроса,
когда запись со значениями указанными в REPLACE в конечном счете
имеет все то же значение автоинкрементного поля? (скажем 28, а не 33,34, и т.д.)P.S. На эти мелочи практически плевать, но просто интересно.
Если кто знает напишите пожалуйста.P.S. Надеюсь тут после Нового Года `живые' еще есть? ;)