У меня есть куча прайс-листов, и я их последовательно загружаю в базу.
Прайсы меняются со временем. Очень часто слегка меняется только имя категории, а её товары остаются прежними. Они есть в старой базе, но со старым именем категории. Вот такие слешка изменившиеся категории хочу отлавливать пере записью в основные таблицы.
Есть такие таблицы:
CREATE TABLE `cats` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(150) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=823 DEFAULT CHARSET=cp1251;
INSERT INTO
`cats`(
`id`,
`name`)
VALUES
(1, 'Прайс-листы'),
(2, 'Компьютеры'),
(3, 'Настольные'),
(4, '01. Компьютеры'),
(5, '01. ФЕДЕРАЛЬНАЯ ЛИНЕЙКА ПК');
CREATE TABLE `goods` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`cid` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6084 DEFAULT CHARSET=cp1251;
INSERT INTO
`goods`(
`id`,
`name`,
`cid`)
VALUES
(1, 'этот товар в основной таблице есть', 1),
(2,
'этот товар в основной таблице тоже есть',
2),
(6,
'этот товар в основной таблице тоже есть',
2),
(7,
'этот товар в основной таблице тоже есть',
2),
(3, 'товар только в основной таблице', 3),
(8, 'товар только в основной таблице', 3),
(4, 'товар только в основной таблице', 4),
(5,
'этот товар тоже есть, но у него сменилось имя родительской категории',
5);
CREATE TABLE `temp_cats` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(150) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=819 DEFAULT CHARSET=cp1251;
INSERT INTO
`temp_cats`(
`id`,
`name`)
VALUES
(10, 'Прайс-листы'),
(20, 'Компьютеры'),
(30, 'Настольные'),
(40, 'у этой категории тоже сменилось имя.'),
(50, 'у этой категории сменилось имя');
CREATE TABLE `temp_goods` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`cid` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6084 DEFAULT CHARSET=cp1251;
INSERT INTO
`temp_goods`(
`id`,
`name`,
`cid`)
VALUES
(1, 'этот товар в основной таблице есть', 10),
(2,
'этот товар в основной таблице тоже есть',
20),
(3, 'этого товара в основной таблице нет', 30),
(4, 'этого товара в основной таблице нет', 40),
(6, 'этого товара в основной таблице нет', 40),
(5,
'этот товар тоже есть, но у него сменилось имя родительской категории',
50),
(7,
'этот товар тоже есть, но у него сменилось имя родительской категории',
50);
Мне требуется выбрать из временной таблицы temp_cats те категории, которые сменили имя,
но товары которых (temp_goods) присутствуют в основной таблице goods.
Связь товаров и категорий по id <-> cid.
Отредактированно kpoxo6op (22.06.2011 11:40:16)