Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2013, 01:43   #1
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию Insert or Update в хранимой процедуре

Похоже это самый подходящий раздел)
Вообщем у меня такая проблема, мне надо в таблицу
Код:
CREATE TABLE `salary` (
  `id_sal` INT(11) NOT NULL AUTO_INCREMENT,
  `id_sotr` INT(11) NOT NULL COMMENT 'id сотрудника',
  `date_work` DATE DEFAULT NULL COMMENT 'Дата рабочего дня',
  `summa` DECIMAL(10,2) DEFAULT NULL COMMENT 'Сумма всех заказов',
  PRIMARY KEY (`id_sal`),
  UNIQUE KEY `id_sotr` (`id_sotr`),
  UNIQUE KEY `date_work` (`date_work`)
) ENGINE=INNODB AUTO_INCREMENT=78 DEFAULT CHARSET=cp1251
добавить запись о "Зарплате сотрудника" за день, а если уже имеется запись по ади сотруднику и дате то обновить сплюсовав поле summa

пишу в хранимке следующее

Код:
	INSERT INTO `hairsalon`.`salary` (id_sotr, date_work, summa) VALUES (id, dates, summ) ON DUPLICATE KEY UPDATE `summa` = `summa`+ summa;
вызываю тут же
Код:
CALL salary_upendwork(4, "2013-10-16", "125.54");
Проблема в том что если уже добавлен сотрудник, он то дальше системе побарабану какая там дата указана если находит ади сотрудника то делает сумму, а мне надо ещё чтобы он учитывал дату и ади сотрудника... ПОмогите плз...
Dozent вне форума Ответить с цитированием
Старый 15.10.2013, 02:55   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

так у вас уникальные ключи висят, не может быть 2 записи с одинаковым id_sotr, и не может быть 2 одинаковых дат, обламывается на первом и идет по DUPLICATE KEY UPDATE
eval вне форума Ответить с цитированием
Старый 15.10.2013, 03:02   #3
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

я это уже понял, что можете предложить чтобы заставить его думать сразу по двум полям?
Dozent вне форума Ответить с цитированием
Старый 15.10.2013, 03:12   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

неужели ваша база не умеет делать составные ключи?
eval вне форума Ответить с цитированием
Старый 15.10.2013, 03:17   #5
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

да умеет))) просто почемуто не сразу додумался до этого)
удалил из таблицы поле id_sal

Код:
CREATE TABLE `salary` (
  `id_sotr` INT(11) NOT NULL COMMENT 'id сотрудника',
  `date_work` DATE NOT NULL COMMENT 'Дата рабочего дня',
  `summa` DECIMAL(10,2) DEFAULT NULL COMMENT 'Сумма всех заказов',
  PRIMARY KEY (`id_sotr`,`date_work`)
) ENGINE=INNODB DEFAULT CHARSET=cp1251
составным ключ будет сочиетание адисотр и даты ну и хранимка

Код:
	INSERT IGNORE INTO `hairsalon`.`salary` (id_sotr, date_work, summa) VALUES (id, dates, "0.00");  
	UPDATE `hairsalon`.`salary`  SET `summa` = `summa`+ summ WHERE `id_sotr` = id AND `date_work` = dates;
всем спасибо)
Dozent вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Update or Insert и FireBird 2.5.2 Pashka_cool БД в Delphi 21 23.08.2013 23:55
UPDATE OR INSERT по нескольким таблицам в одной процедуре Dozent БД в Delphi 1 21.02.2013 16:40
выполнение запросов(Insert,Update) Rio309 C# (си шарп) 1 20.03.2011 17:10
как отключить соединения с БД в хранимой процедуре Neymexa SQL, базы данных 0 06.04.2010 11:44
insert и update Tanusha SQL, базы данных 4 13.03.2009 14:47