Обновлять запрос на MySQL только при наличии двух условий, в противном случае Insert ( - PullRequest
1 голос
/ 10 января 2012

У меня есть такая таблица:

ID ID_USER SOURCE CONTENT

или просто:

CREATE TABLE `p_l_0215` (
  `id` bigint(20) NOT NULL auto_increment,
  `id_user` bigint(20) NOT NULL,
  `source` varchar(50) NOT NULL,
  `content` text NOT NULL,
  KEY `id` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

Я хочу обновить, когда ID_USER = Значение1 и SOURCE = 'default' если это условие не существует, я хочу вставить.Я знаю метод, когда у меня есть дубликат ключа, но в этой таблице ID_USER ни SOURCE не может быть УНИКАЛЬНЫМ.Так как я могу решить это?Спасибо за любую помощь!

Ответы [ 3 ]

1 голос
/ 10 января 2012

1) создать процедуру

delimiter //
CREATE PROCEDURE smartInsert(given_id_user bigint(20),given_source varchar(50), given_content text) 
BEGIN 

IF (EXISTS(SELECT * FROM p_l_0215 WHERE `id_user`=given_id_user AND `source`=given_source))
THEN
    UPDATE p_l_0215 SET `content`=given_content WHERE `id_user`=given_id_user AND `source`=given_source;
ELSE
      INSERT INTO p_l_0215 VALUES (null, given_id_user, given_source, given_content);
END IF;
END//
delimiter ;

2) тогда просто назовите это так CALL smartInsert(13, 'some_source', 'some content');

1 голос
/ 10 января 2012

Как я понимаю, вы хотите обновить существующую пару (user_id, source), если она уже существует, в противном случае вставьте новую строку. (user_id, source) пары уникальны по всей таблице.

То есть вам нужно а) добавить УНИКАЛЬНОЕ ограничение для пары:

ALTER TABLE `yourtable`
  ADD UNIQUE INDEX `unique_user_source` USING BTREE(`ID_USER`, `SOURCE`);

и b) написать запрос upsert следующим образом (@user_id и @content - переменные, которые вы передаете в запрос):

INSERT INTO yourtable (ID_USER, CONTENT)
  VALUES(@user_id, @content)
ON DUPLICATE KEY UPDATE
  CONTENT = VALUES(CONTENT);
0 голосов
/ 10 января 2012

Какую версию MySql вы используете ... если она 5.0 или выше, вы можете использовать

INSERT ON DUPLICATE KEY UPDATE

Смотрите дальше здесь

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

Это работает только для MySQL 5.0+

Пример:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...