if в mysql

Статус
В этой теме нельзя размещать новые ответы.

rijy

Гуру форума
Регистрация
3 Ноя 2007
Сообщения
250
Реакции
80
Здравствуйте, форумчане!
Подскажите плз оптимальное решение следующего вопроса.

Хочу согласовать 1С с интернет-магазом. При добавлении какого-либо товара 1С формирует команду INSERT с необходимыми полями. Товаров может добавляться много одним дампом. При изменении какого либо товара формируется команда UPDATE, в которой указывается, какие поля товара поменять в БД магазина.

Возникает такой вопрос. Если при добавлении большого кол-ва товаров произойдет какой-то сбой и например один товар не добавится - получится рассинхронизация БД 1С и БД магазина. В 1С товар будет добавлен и его можно будет изменять, и при изменении такого товара в 1С сформируется команда UPDATE. Но, насколько я понимаю, она не сработает при импорте такого дампа в БД магазина, т.к. товара в БД магазина нет изза глюка при добавлении.

Можно ли использовать для проверки наличия товара в БД оператор IF прямо в sql-дампе? Т.е. условие: если товар с таким-то ID присутствует в БД магазина - значит проводится команда UPDATE, если нет - пропуск.

Понимаю что решение наверняка не оптимальное. Что вы посоветуете в данном случае? Есть ли альтернативные варианты решения вопроса?
Очень хотелось бы при решении вопроса ограничиться возможностями mysql, без привлечения php.
 
а если INSERT and UPDATE объеденить в

PHP:
INSERT ***** 
ON DUPLICATE KEY UPDATE ****
Для просмотра ссылки Войди или Зарегистрируйся

и это бы решило проблему с россинхровкой БД в случае некорректного завершения работы скрипта с INSERT-ами
 
  • Нравится
Реакции: rijy
цитата из приведенной ссылки:
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
--> ON DUPLICATE KEY UPDATE c=c+1;

Если a определяется как UNIQUE и уже содержит 1, то тогда вышеуказанная команда будет аналогична следующей:

mysql> UPDATE table SET c=c+1 WHERE a=1;
Как определить какое поле является UNIQUE ? Или как его сделать UNIQUE ?
 
в phpmyadmin ( ну или чем ты БД администрируешь )
 
цитата из приведенной ссылки:
Как определить какое поле является UNIQUE ? Или как его сделать UNIQUE ?
При указании поля как UNIQUE создается индекс типа UNIQUE.
Его можно задать самому.
Вот пример составного уникального индекса
Код:
ALTER TABLE `db`.`table` ADD UNIQUE (`field1` , `field2`)
Кстати, PRIMARY индекс также считается уникальным.
 
используйте REPLACE и трансакции
 
REPLACE есть в мануале MySQL
этот оператор делает INSERT если нету записи по ключу или UPDATE - если есть.

О трансакциях тоже лучше почитать, что бы понимать для чего они.
в бухгалтерии и работе с важныи данными, деньгами и прочем - очень нужно.
Они позволяют избежать ошибок в расчетах в случае сбоя сервера:
Вася заплатил Пете 100 USD (UPDATE ПЕТЯ SET balance= balance + 100USD)
с Васи снять 100USD с баланса (UPDATE ВАСЯ SET balance= balance - 100USD)
так вот если между запросами сбой, то Пете деньги ушли, а с Васи не снялись.
Трансакция поможет ЛИБО выполнить ОБА запроса либо НИ ОДНОГО (откатить Васе 100 баксов обратно)
 
  • Нравится
Реакции: rijy
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху