The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Условная вставка."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы WEB технологии (Public)
Изначальное сообщение [Проследить за развитием треда]

"Условная вставка."  
Сообщение от kerdan (ok) on 31-Дек-06, 22:14 
Я где-то недавно видел подобную тему в этом форуме, но че-то не нашел.
Вообщем, вопрос таков:
Как (любым способом, лучше - все...) сделать запрос на вставку записи при
каком-то условии. Т.е. Если так-то то это вставить надо, иначе - нет.
Я PL еще не изучал - без него обхожусь: если это с помощью него можно,
то напишите просто пример кода.

Тупо сначало селектом проверять - идиотизм.
Типичная ситуация - один процесс проверил, решил - надо всталять, а
другой тоже самое сделал; и оба вставили...

Давно, где-то видел в доках что-то подобное, но забыл, т.к. использовать не приходилось.
Напомните, плиз.

P.S. Да! И не факт, что мускул, постгресс, оракл... - стандартное решение желательно.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Условная вставка."  
Сообщение от zyxman on 01-Янв-07, 02:19 
>Я где-то недавно видел подобную тему в этом форуме, но че-то не
>нашел.
>Вообщем, вопрос таков:
>Как (любым способом, лучше - все...) сделать запрос на вставку записи при
>
>каком-то условии. Т.е. Если так-то то это вставить надо, иначе - нет.

есть такая штука IF (в mysql точно есть), вроде поддерживается в SQL 92

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Условная вставка."  
Сообщение от kerdan (ok) on 01-Янв-07, 23:29 
>есть такая штука 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. Надеюсь тут после Нового Года `живые' еще есть? ;)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру