Primero asegúrese de que sus categorías sean exclusivas. Asegúrese de no tener algo como:
productx and produtx
De lo contrario, cuando inserte categorías incorrectas.
Tendrá que hacerlo en el paso:
1) Creación de la categoría de la tabla
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;
Cree la tabla de intersección ya que un producto puede estar en categorías múltiples y una categoría puede tener múltiples producto.
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;
2) inserta las categorías en la tabla.
INSERT IGNORE INTO category SELECT DISTINCT category from product;
Esto insertará categorías no duplicados en la tabla de categorías con un identificador único.
Ahora, usted tiene que inserta estos registros en el
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`);
3) Ahora tiene que modificar su código con el fin de utilizar la consulta derecha: Ejemplo:
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 ...
4) Ahora, cuando se sienta cómodo con sus cambios de código, puede soltar la columna no utilizada:
ALTER TABLE product DROP COLUMN category;
categoría es varchar? –
sí varchar (40) campo no nulo, ya que la categoría es necesaria al insertar el producto – rcs20