Есть 2 таблицы:
qgqn_categories
и qgqn_products
qgqn_categories
qgqn_products
В qgqn_categories
есть categoryID
и products_count
, который выводит не правильное количество товаров потому, что товар может быть out_of_stock
, но при этом со статусом enabled
. Поэтому модуль его записывает в products_count
.
В таблице qgqn_products
есть productID
, categoryID
, in_stock
Возникла идея связать данные этих таблиц в 1 SQL запрос и получить список пустых категорий, но нет достаточного опыта, как это правильно сделать.
Я так понимаю нужно пересчитать количество товаров, которых нет в наличии и потом как-то сопоставить ID категорий.
Подскажите пожалуйста, потому что там я так предполагаю и JOIN придется затронуть
Но чувствую, что-то пошло не так)))
CREATE TABLE `qgqn_categories` (
`categoryID` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`parent` int(11) DEFAULT NULL,
`products_count` int(11) DEFAULT NULL,
`description` text,
`picture` varchar(30) DEFAULT NULL,
`products_count_admin` int(11) DEFAULT NULL,
`sort_order` int(11) DEFAULT '0',
`viewed_times` int(11) DEFAULT '0',
`allow_products_comparison` int(11) DEFAULT '0',
`allow_products_search` int(11) DEFAULT '1',
`show_subcategories_products` int(11) DEFAULT '1',
`meta_description` text,
`meta_keywords` text,
`title` text,
`subcount` int(11) DEFAULT '0',
PRIMARY KEY (`categoryID`),
KEY `IDX_CATEGORIES1` (`parent`),
KEY `SORT_ORDER` (`sort_order`)
) ENGINE=InnoDB AUTO_INCREMENT=95507 DEFAULT CHARSET=cp1251;
INSERT INTO `qgqn_categories` VALUES (1,'Главная категория',NULL,8110,NULL,NULL,25431,0,939560,0,1,1,NULL,NULL,NULL,0),(94724,'ООО "Орион"',1,297,'','',428,1,101224,0,1,1,'','','',0),(94729,'Батарейки',1,4,'','',31,28,3197,0,1,1,'','','',0),(94730,'Все для праздника',1,12,'','',122,29,6573,0,1,1,'','','',2),
CREATE TABLE `qgqn_products` (
`productID` int(11) NOT NULL AUTO_INCREMENT,
`categoryID` int(11) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`description` text,
`customers_rating` float DEFAULT '0',
`Price` double DEFAULT NULL,
`Price_opt1` double DEFAULT NULL,
`Price_opt2` double DEFAULT NULL,
`Price_opt3` double DEFAULT NULL,
`Price_opt4` double DEFAULT NULL,
`in_stock` int(11) DEFAULT NULL,
`customer_votes` int(11) DEFAULT '0',
`items_sold` int(11) NOT NULL,
`enabled` int(11) DEFAULT NULL,
`brief_description` text,
`list_price` double DEFAULT NULL,
`list_price_opt` double DEFAULT NULL,
`product_code` varchar(25) DEFAULT NULL,
`sort_order` int(11) DEFAULT '0',
`default_picture` int(11) DEFAULT NULL,
`date_added` datetime DEFAULT NULL,
`date_modified` datetime DEFAULT NULL,
`viewed_times` int(11) DEFAULT '0',
`eproduct_filename` varchar(255) DEFAULT NULL,
`eproduct_available_days` int(11) DEFAULT '5',
`eproduct_download_times` int(11) DEFAULT '5',
`weight` float DEFAULT '0',
`meta_description` text,
`meta_keywords` text,
`free_shipping` int(11) DEFAULT '0',
`min_order_amount` int(11) DEFAULT '1',
`shipping_freight` double DEFAULT '0',
`classID` int(11) DEFAULT NULL,
`title` text,
PRIMARY KEY (`productID`),
KEY `IDX_PRODUCTS1` (`categoryID`)
) ENGINE=InnoDB AUTO_INCREMENT=2066272 DEFAULT CHARSET=cp1251;
INSERT INTO `qgqn_products` VALUES (2003458,94724,'А/м Бетономешалка песч.(16)','Компания “Орион” является одним из ведущих европейских производителей детских пластмасовых игрушек. Более 25 лет мы радуем ваших детей безупречным качеством изделий и широким ассортиментом продукции. Современные технологии, квалифицированные специалисты и свежие идеи помогают компании удерживать лидирующие позиции на рынке игрушек Украины и Зарубежья.\nНаша команда профессиональных дизайнеров и конструкторов создают уникальные модели, что делает нашу продукцию узнаваемой и востребованной не только в Украине, но и далеко за ее пределами. Также при изготовлении продукции мы используем высококачественное сырье и экологически-чистые материалы без химических примесей, вредных для здоровья малышей.',1,124.2,82.8,0,0,0,888,2,0,1,'<table><tbody><tr><td>Гарантия</td><td>14 дней</td></tr><tr><td>Тип</td><td>Бетономешалка</td></tr><tr><td>Тематика</td><td>Спецтехника</td></tr><tr><td>Категория</td><td>Игрушки для мальчиков</td></tr><tr><td>Материал</td><td>пластик</td></tr><tr><td>Размер</td><td>365 x 175 x 240 мм</td></tr><tr><td>Производитель</td><td>Орион</td></tr><tr><td>К-во штук в упаковке,ящике(опт)</td><td>16 шт.</td></tr><tr><td>Пол</td><td>Для мальчиков</td></tr><tr><td>Возраст</td><td>от 3 лет</td></tr></tbody></table>',0,0,'00000002590',0,18426713,'2018-05-21 16:29:47','2019-12-18 06:28:23',1125,'',7,5,0,'','',0,1,0,0,'А/м Бетономешалка песч.(16)'),(2003459,94724,'А/м Камакс - Н комунальная машина (27)','Компания “Орион” является одним из ведущих европейских производителей детских пластмасовых игрушек. Более 25 лет мы радуем ваших детей безупречным качеством изделий и широким ассортиментом продукции. Современные технологии, квалифицированные специалисты и свежие идеи помогают компании удерживать лидирующие позиции на рынке игрушек Украины и Зарубежья.\nНаша команда профессиональных дизайнеров и конструкторов создают уникальные модели, что делает нашу продукцию узнаваемой и востребованной не только в Украине, но и далеко за ее пределами. Также при изготовлении продукции мы используем высококачественное сырье и экологически-чистые материалы без химических примесей, вредных для здоровья малышей.',0,51.8,34.56,0,0,0,888,0,0,1,'<table><tbody><tr><td>Тип</td><td>Машинка</td></tr><tr><td>Тематика</td><td>Спецтехника</td></tr><tr><td>Размер</td><td>250 x 95 x 137 мм</td></tr><tr><td>К-во штук в упаковке,ящике(опт)</td><td>27 шт.</td></tr><tr><td>Пол</td><td>Для мальчиков</td></tr><tr><td>Возраст</td><td>от 3 лет</td></tr></tbody></table>',0,0,'00000007720',0,18426712,'2018-05-21 16:29:47','2019-12-18 06:28:23',843,'',0,0,0,'','',0,1,0,0,'А/м Камакс - Н комунальная машина (27)'),
В результате список пустых категорий:
Category Name => Product Count
`qgqn_categories`.name => 0
`qgqn_categories`.name => 0
`qgqn_categories`.name => 0
В зависимости от того, что тебе нужно можно пойти разными способами.
1) Если тебе нужно список всех категорий, даже если у него нет товара в таблице qgqn_products, тогда можно просто отсеять все категории, в которых присутствует товар.
SELECT distinct `qgqn_categories`.name AS Category_Name
FROM `qgqn_categories`
WHERE `qgqn_categories`.categoryID not in (
select categoryID
from `qgqn_products`
where `qgqn_products`.in_stock > 0
)
and `qgqn_categories`.parent > 1;
2) Если же тебе важно чтобы была запись в таблице qgqn_products, тогда можно модернизировать твой запрос, чтобы выбирать только те товары, по которым есть записи в обеих таблицах
SELECT `qgqn_categories`.name AS Category_Name
FROM `qgqn_products`
INNER JOIN
`qgqn_categories` ON `qgqn_categories`.categoryID = `qgqn_products`.categoryID
WHERE `qgqn_categories`.parent > 1 -- я так понимаю это условие нужно лично тебе в данном кейсе
GROUP BY `qgqn_products`.categoryID
HAVING SUM(`qgqn_products`.in_stock) = 0;
В общем, задачу решил таким способом
SELECT
`qgqn_categories`.name AS Category_Name, SUM(if(`qgqn_products`.in_stock > 0, 1, 0)) AS Product_Count
FROM
`qgqn_products`
INNER JOIN
`qgqn_categories` ON `qgqn_categories`.categoryID = `qgqn_products`.categoryID
WHERE
`qgqn_categories`.parent > 1
GROUP BY
`qgqn_products`.categoryID
ORDER BY
Product_Count ASC
Результат
20/40 МАКСИ => 0
Дартс => 0
Блокноты, закладки => 0
2 в 1 CONTOUR (9*15 элементов) => 0
Электромобили => 0
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Пишу программу,которая запускаетpy скрипт в фоне через GUI на Java
Такая проблема: Когда я пытаюсь реализовать данный код, то у меня все внутри подчеркивается красным и я не знаю как исправить это:
Я установил томкат на удаленный сервер , когда делаю деплой своего проекта написанный спринге , проект запускается , однако почему - то не загружается...
У меня есть "параллельный" поток, класс расширяемый с помощью Task<Void>В методе call() есть вызов нового объекта, который должен открыть новое...