Здравствуйте товарищи!
У меня нужно объеденить несколько таблиц, и с каждой таблицы, поскольку ключи совпадают в нескольких записях, group_concat (для дальнейшей распилки в пхп).
Структура:
/*товары*/
CREATE TABLE `shop_goods` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`name` varchar(200) NOT NULL DEFAULT 'продукт',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
/*------------------------------------------------------------------------------------*/
/*наборы товаров*/
CREATE TABLE `shop_product_type` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`name` varchar(200) NOT NULL DEFAULT 'набор продуктов',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
/*таблица с ключами. id_product - ключ к товару, id_type - ключ к набору*/
CREATE TABLE `shop_product_type_keys` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`id_product` int(6) DEFAULT '0',
`id_type` int(6) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
/*------------------------------------------------------------------------------------*/
/*классы товаров*/
CREATE TABLE `shop_product_class` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`name` varchar(200) NOT NULL DEFAULT 'класс продуктов',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
/*таблица с ключами. id_product - ключ к товару, id_type - ключ к классу*/
CREATE TABLE `shop_product_class_keys` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`id_product` int(6) DEFAULT '0',
`id_class` int(6) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
Делаю запрос (запостил упрощённые модели таблиц, может в посте в синтаксисе ошибся, но суть не в этом)
SELECT
shop_goods.name as product_name
group_concat(shop_product_type.name separator '||') as type_names,
group_concat(shop_product_class.name separator '||') as class_names
FROM shop_goods
LEFT JOIN shop_product_type_keys
ON shop_goods.id=shop_product_type_keys.id_product
LEFT JOIN shop_product_type
ON shop_product_type.id=shop_product_type_keys.id_type
LEFT JOIN shop_product_class_keys
ON shop_goods.id=shop_product_class_keys.id_product
LEFT JOIN shop_product_class
ON shop_product_class.id=shop_product_class_keys.id_class
GROUP BY 1;
И получается что он заходит в shop_product_class_keys не 1 раз в один продукт (как мне требуется), а столько, сколько записей в shop_product_type (или в shop_product_type_keys я честно говоря не понимаю всё до конца)
Подскажите, как сделать так, чтобы небыло лишних заходов в shop_product_class_keys ?
А то как на скрине получается одинаковые значения...
Прикрепленные файлы:
left_join.jpg, Размер: 106,672 байт, Скачано: 355