Допустим есть две записи в таблице user. Так как это одна из основных таблиц в системе, на которой завязанны множество других таблиц, триггеров и прочих связей через user_id Как правильней обьединить две записи в этой таблице? Чтоб во всех связанных таблицах поменялся user_id?
Пример
CREATE TABLE IF NOT EXISTS `user` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=80 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `user` (`user_id`, `name`) VALUES
(76, 'USER-76'),
(79, 'USER-79');
CREATE TABLE IF NOT EXISTS `user_contact` (
`user_id` int(11) NOT NULL,
`type_enum` enum('PHONE','EMAIL','SKYPE') COLLATE utf8_unicode_ci NOT NULL,
`value` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`user_id`,`type_enum`),
KEY `user_id` (`user_id`),
CONSTRAINT `FK_user_contact_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `user_contact` (`user_id`, `type_enum`, `value`) VALUES
(76, 'PHONE', '76767676'),
(76, 'EMAIL', 'test76@gmail.com'),
(79, 'PHONE', '79797979'),
(79, 'SKYPE', 'skype-79');
http://www.sqlfiddle.com/#!9/866d5f/1
Тоесть я хочу подмержить все записи 79-го пользователя в 76-го При возникновении конфликта, значения из копируемой записи игнорируются
В голову пришло только такое
SET @FROM_ID = 79;
SET @TO_ID = 76;
START TRANSACTION;
SET foreign_key_checks = 0;
DELETE FROM `user` WHERE user_id=@TO_ID;
SET foreign_key_checks = 1;
UPDATE `user` SET user_id=@TO_ID WHERE user_id=@FROM_ID;
COMMIT;
Но это только в том случае когда нет конфликтов.
В результате должно получиться следующее
SELECT
u.user_id,
u.name,
uc.type_enum,
uc.value
FROM `user` u
LEFT JOIN user_contact uc USING (user_id);
+---------+---------+-----------+-------------------+
| user_id | name | type_enum | value |
+---------+---------+-----------+-------------------+
| 76 | USER-76 | PHONE | 76767676 |
| 76 | USER-76 | EMAIL | test76@gmail.com |
| 76 | USER-76 | SKYPE | skype79 |
+---------+---------+-----------+-------------------+
Можно конечно сходить во все связанные таблицы, и с помощью PHP обновить записи там, но это нужно найти все связи и писать целую систему для этого. Может есть способ попроще?
Так может просто айдюки прописать у связанных таблиц?
update 'linked_table' set userID=firstUser where userID=secondUser
И если при этом происходит какой-то эксепшен, то и фиг с ним. А по завершению, просто удаляете пользователя secondUser
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Собственно говоря есть у меня огромная база, на несколько террабайтХочу вытащить FK для нее, где-то таким запросом
Помогите с задачкой, пожалуйстаЯ даже понять не могу, как связываются таблицы :(
Нужно реализовать слайдер как на картинкеСделала при помощи slick слайдера, но нигде в настройках не нашла строчки, что бы картинка в центре...