Prima assicurati che le tue categorie siano uniche. Assicurati di non avere qualcosa del tipo:
productx and produtx
Altrimenti, quando inserirai cattive categorie.
Si dovrà fare in passo:
1) Creazione della categoria tavolo
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;
creare la tabella di intersezione dal momento che un prodotto può essere in categorie multiple e una categoria può avere più Prodotto.
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) inserisce le categorie nella tabella.
INSERT IGNORE INTO category SELECT DISTINCT category from product;
Questo inserirà categorie non duplicati nella tabella categoria con un ID univoco.
Ora, bisogna inserisce questi record nella
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) Ora è necessario modificare il codice in modo da utilizzare la query giusta: Esempio:
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) Ora, quando ti senti a tuo agio con le modifiche al codice, puoi rilasciare la colonna non utilizzata:
ALTER TABLE product DROP COLUMN category;
la categoria è varchar? –
yes varchar (40) campo non nullo poiché la categoria è richiesta quando si inserisce il prodotto – rcs20