Всем привет!
Нужно помочь з правильным хранениям остатки товаров, когда есть n складов.
Сейчас есть 3 таблицы, хранения товаров (≈ 300 000), храненния остатков (≈ 1 000 000), склады(5):
CREATE TABLE `products` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=224583 DEFAULT CHARSET=utf8;
CREATE TABLE `stocks` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`stock` int(11) DEFAULT NULL,
`product` int(11) DEFAULT NULL,
`count` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `cid` (`product`)
) ENGINE=InnoDB AUTO_INCREMENT=536813420 DEFAULT CHARSET=utf8;
CREATE TABLE `stock` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(512) CHARACTER SET cp1251 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
Чтоб получить список товаров и их остатки, составил вот такой запрос:
SELECT products.id, products.name, GROUP_CONCAT(CONCAT_WS("|", stocks.stock, stocks.count) SEPARATOR ",") AS counts FROM products LEFT JOIN stocks ON products.id = stocks.product GROUP BY products.id LIMIT 0, 10
Результат запроса:
После получения данных склады (counts) разделяю на PHP функцией
explode
Теперь вопросы:
1. Есть ли лучшие решения хранить остатки?
2. Как правельно фильтровать? (Например если я хочу по двум складам только учитывать наявные товары)
3. Как можно получить остатки без
explode?