Boo*_*eus 24
首先确保您的类别是唯一的.确保你没有类似的东西:
productx and produtx
Run Code Online (Sandbox Code Playgroud)
否则,您将插入错误的类别.
您必须在步骤中执行此操作:
1)创建表类别
CREATE TABLE `category` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(40) NOT NULL DEFAULT 'General',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)
创建交集表,因为产品可以是多个类别,而类别可以有多个产品.
CREATE TABLE `product_category` (
`product_id` int(10) unsigned NOT NULL,
`category_id` int(10) unsigned NOT NULL,
PRIMARY KEY product_category (`product_id`,`category_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)
2)将类别插入表中.
INSERT IGNORE INTO category SELECT DISTINCT category from product;
Run Code Online (Sandbox Code Playgroud)
这会将非重复类别插入到具有唯一ID的类别表中.
现在,您必须在中插入这些记录
INSERT IGNORE INTO `product_category` SELECT `product`.`id` AS `product_id`, `category`.`id` AS `category_id` FROM `category` LEFT JOIN `product` ON (`category`.`name` = `product`.`category`);
Run Code Online (Sandbox Code Playgroud)
3)现在您必须修改代码才能使用正确的查询: 示例:
SELECT
/* your fields */
FROM
product
INNER JOIN product_category ON (product.id = product_category.product_id)
INNER JOIN category ON (category.id = product_category.category_id)
WHERE ...
Run Code Online (Sandbox Code Playgroud)
4)现在,当您对代码更改感到满意时,可以删除未使用的列:
ALTER TABLE product DROP COLUMN category;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |