File indexing completed on 2024-04-21 06:00:36
0001 DROP PROCEDURE IF EXISTS `generate_stat_store_prod_count`; 0002 0003 DELIMITER $$ 0004 CREATE 0005 DEFINER = CURRENT_USER PROCEDURE `generate_stat_store_prod_count`() 0006 BEGIN 0007 0008 DECLARE `v_finished` INTEGER DEFAULT 0; 0009 DECLARE `v_store_id` varchar(255) DEFAULT ""; 0010 DECLARE `v_store_tag_ids` varchar(255) DEFAULT ""; 0011 0012 DECLARE `idx`,`prev_idx` int; 0013 DECLARE `v_id` varchar(10); 0014 0015 -- declare cursor for employee email 0016 DECLARE `store_cursor` CURSOR FOR 0017 SELECT * FROM `tmp_stat_store_tagids`; 0018 0019 -- declare NOT FOUND handler 0020 DECLARE CONTINUE HANDLER 0021 FOR NOT FOUND SET `v_finished` = 1; 0022 0023 0024 DROP TABLE IF EXISTS `tmp_stat_store_tagids`; 0025 CREATE TEMPORARY TABLE `tmp_stat_store_tagids` 0026 AS 0027 SELECT `cs`.`store_id`, 0028 GROUP_CONCAT(`ct`.`tag_id` 0029 ORDER BY `ct`.`tag_id`) AS `tag_ids` 0030 FROM `config_store` `cs` 0031 LEFT JOIN 0032 `config_store_tag` `ct` ON `ct`.`store_id` = `cs`.`store_id` 0033 AND `ct`.`is_active` = 1 0034 #WHERE `cs`.`store_id` = 7 0035 GROUP BY `cs`.`store_id`; 0036 0037 0038 DROP TABLE IF EXISTS `tmp_stat_store_prod_count`; 0039 CREATE TABLE `tmp_stat_store_prod_count` 0040 ( 0041 `project_category_id` INT(11) NOT NULL, 0042 `tag_id` VARCHAR(255) NULL, 0043 `count_product` INT(11) NULL, 0044 `stores` VARCHAR(255) NULL, 0045 INDEX `idx_tag` (`project_category_id`, `tag_id`) 0046 ) 0047 ENGINE MyISAM 0048 AS 0049 SELECT `sct2`.`project_category_id`, 0050 NULL AS `tag_id`, 0051 count(DISTINCT `p`.`project_id`) AS `count_product` 0052 FROM `stat_cat_tree` AS `sct1` 0053 JOIN `stat_cat_tree` AS `sct2` ON `sct1`.`lft` BETWEEN `sct2`.`lft` AND `sct2`.`rgt` 0054 LEFT JOIN `stat_projects` AS `p` ON `p`.`project_category_id` = `sct1`.`project_category_id` 0055 WHERE `p`.`amount_reports` IS NULL 0056 GROUP BY `sct2`.`project_category_id`; 0057 0058 0059 OPEN `store_cursor`; 0060 0061 `get_store`: 0062 LOOP 0063 0064 FETCH `store_cursor` INTO `v_store_id`, `v_store_tag_ids`; 0065 0066 IF `v_finished` = 1 THEN 0067 LEAVE `get_store`; 0068 END IF; 0069 0070 -- build email list 0071 0072 0073 SET @`sql` = ' 0074 INSERT INTO tmp_stat_store_prod_count 0075 SELECT 0076 sct2.project_category_id, 0077 tg.tag_ids as tag_id, 0078 count(distinct p.project_id) as count_product, 0079 tg.store_id 0080 FROM stat_cat_tree as sct1 0081 JOIN stat_cat_tree as sct2 ON sct1.lft between sct2.lft AND sct2.rgt 0082 JOIN stat_projects as p ON p.project_category_id = sct1.project_category_id 0083 JOIN tmp_stat_store_tagids tg 0084 0085 WHERE p.amount_reports is null 0086 '; 0087 SET @`sql` = CONCAT(@`sql`, ' AND tg.store_id = ', `v_store_id`, ' '); 0088 SET @`sql` = CONCAT(@`sql`, ' AND (1=1 '); 0089 0090 SET `idx` := locate(',', `v_store_tag_ids`, 1); 0091 0092 IF LENGTH(`v_store_tag_ids`) > 0 THEN 0093 0094 IF `idx` > 0 THEN 0095 SET `prev_idx` := 1; 0096 WHILE `idx` > 0 DO 0097 SET `v_id` := substr(`v_store_tag_ids`, `prev_idx`, `idx` - `prev_idx`); 0098 SET @`sql` = CONCAT(@`sql`, ' AND FIND_IN_SET(', `v_id`, ', p.tag_ids) '); 0099 SET `prev_idx` := `idx` + 1; 0100 SET `idx` := locate(',', `v_store_tag_ids`, `prev_idx`); 0101 0102 IF `idx` = 0 THEN 0103 SET `v_id` := substr(`v_store_tag_ids`, `prev_idx`); 0104 SET @`sql` = CONCAT(@`sql`, ' AND FIND_IN_SET(', `v_id`, ', p.tag_ids) '); 0105 END IF; 0106 END WHILE; 0107 ELSE 0108 0109 SET @`sql` = CONCAT(@`sql`, ' AND FIND_IN_SET(', `v_store_tag_ids`, ', p.tag_ids) '); 0110 0111 END IF; 0112 END IF; 0113 0114 SET @`sql` = CONCAT(@`sql`, ') '); 0115 SET @`sql` = CONCAT(@`sql`, 'GROUP BY sct2.lft, tg.tag_ids,tg.store_id'); 0116 0117 SELECT @`sql`; 0118 0119 PREPARE `stmt` FROM @`sql`; 0120 EXECUTE `stmt`; 0121 DEALLOCATE PREPARE `stmt`; 0122 0123 END LOOP `get_store`; 0124 0125 CLOSE `store_cursor`; 0126 0127 0128 IF EXISTS(SELECT `table_name` 0129 FROM `INFORMATION_SCHEMA`.`TABLES` 0130 WHERE `table_schema` = DATABASE() 0131 AND `table_name` = 'stat_store_prod_count') 0132 THEN 0133 RENAME TABLE 0134 `stat_store_prod_count` TO `old_stat_store_prod_count`, 0135 `tmp_stat_store_prod_count` TO `stat_store_prod_count`; 0136 0137 ELSE 0138 RENAME TABLE 0139 `tmp_stat_store_prod_count` TO `stat_store_prod_count`; 0140 0141 END IF; 0142 0143 0144 DROP TABLE IF EXISTS `old_stat_store_prod_count`; 0145 0146 END$$ 0147 0148 0149 CREATE PROCEDURE `fetchCatTreeWithTagsForStore`(IN `STORE_ID` INT(11), 0150 IN `TAGS` VARCHAR(255)) 0151 BEGIN 0152 DROP TABLE IF EXISTS `tmp_store_cat_tags`; 0153 CREATE TEMPORARY TABLE `tmp_store_cat_tags` 0154 ( 0155 INDEX `idx_cat_id` (`project_category_id`) 0156 ) 0157 ENGINE MEMORY 0158 AS 0159 SELECT `csc`.`store_id`, 0160 `csc`.`project_category_id`, 0161 `csc`.`order`, 0162 `pc`.`title`, 0163 `pc`.`lft`, 0164 `pc`.`rgt` 0165 FROM `config_store_category` AS `csc` 0166 JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id` 0167 WHERE `csc`.`store_id` = `STORE_ID` 0168 GROUP BY `csc`.`store_category_id` 0169 ORDER BY `csc`.`order`, `pc`.`title`; 0170 0171 SET @`NEW_ORDER` := 0; 0172 0173 UPDATE `tmp_store_cat_tags` 0174 SET `order` = (@`NEW_ORDER` := @`NEW_ORDER` + 10); 0175 0176 SELECT `sct`.`lft`, 0177 `sct`.`rgt`, 0178 `sct`.`project_category_id` AS `id`, 0179 `sct`.`title`, 0180 `scpc`.`count_product` AS `product_count`, 0181 `sct`.`xdg_type`, 0182 `sct`.`name_legacy`, 0183 if(`sct`.`rgt` - `sct`.`lft` = 1, 0, 1) AS `has_children`, 0184 (SELECT `project_category_id` 0185 FROM `stat_cat_tree` AS `sct2` 0186 WHERE `sct2`.`lft` < `sct`.`lft` 0187 AND `sct2`.`rgt` > `sct`.`rgt` 0188 ORDER BY `sct2`.`rgt` - `sct`.`rgt` 0189 LIMIT 1) AS `parent_id` 0190 FROM `tmp_store_cat_tags` AS `cfc` 0191 JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`) 0192 #LEFT JOIN `stat_store_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` = TAGS 0193 JOIN `stat_store_prod_count` AS `scpc` 0194 ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`stores` = `STORE_ID` 0195 WHERE `cfc`.`store_id` = `STORE_ID` 0196 ORDER BY `cfc`.`order`, `sct`.`lft`; 0197 END$$ 0198 0199 0200 0201 CREATE PROCEDURE `fetchCatTreeWithTags`(IN `STORE_ID` int(11), 0202 IN `TAGS` VARCHAR(255)) 0203 BEGIN 0204 DROP TABLE IF EXISTS `tmp_store_cat_tags`; 0205 CREATE TEMPORARY TABLE `tmp_store_cat_tags` 0206 ( 0207 INDEX `idx_cat_id` (`project_category_id`) 0208 ) 0209 ENGINE MEMORY 0210 AS 0211 SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt` 0212 FROM `config_store_category` AS `csc` 0213 JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id` 0214 WHERE `csc`.`store_id` = `STORE_ID` 0215 GROUP BY `csc`.`store_category_id` 0216 ORDER BY `csc`.`order`, `pc`.`title`; 0217 0218 SET @`NEW_ORDER` := 0; 0219 0220 UPDATE `tmp_store_cat_tags` SET `order` = (@`NEW_ORDER` := @`NEW_ORDER` + 10); 0221 0222 SELECT `sct`.`lft`, 0223 `sct`.`rgt`, 0224 `sct`.`project_category_id` AS `id`, 0225 `sct`.`title`, 0226 `scpc`.`count_product` AS `product_count`, 0227 `sct`.`xdg_type`, 0228 `sct`.`name_legacy`, 0229 if(`sct`.`rgt` - `sct`.`lft` = 1, 0, 1) AS `has_children`, 0230 (SELECT `project_category_id` 0231 FROM `stat_cat_tree` AS `sct2` 0232 WHERE `sct2`.`lft` < `sct`.`lft` 0233 AND `sct2`.`rgt` > `sct`.`rgt` 0234 ORDER BY `sct2`.`rgt` - `sct`.`rgt` 0235 LIMIT 1) AS `parent_id` 0236 FROM `tmp_store_cat_tags` AS `cfc` 0237 JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`) 0238 #JOIN `stat_cat_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` = TAGS 0239 JOIN `stat_store_prod_count` AS `scpc` 0240 ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`stores` = `STORE_ID` 0241 WHERE `cfc`.`store_id` = `STORE_ID` 0242 ORDER BY `cfc`.`order`, `sct`.`lft`; 0243 END$$ 0244 0245 0246 0247 CREATE 0248 `fetchCatTreeForStore` 0249 ( 0250 IN `STORE_ID` INT (11) 0251 ) 0252 BEGIN 0253 DROP TABLE IF EXISTS `tmp_store_cat`; 0254 CREATE TEMPORARY TABLE `tmp_store_cat` 0255 ( 0256 INDEX `idx_cat_id` (`project_category_id`) 0257 ) 0258 ENGINE MEMORY 0259 AS 0260 SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt` 0261 FROM `config_store_category` AS `csc` 0262 JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id` 0263 WHERE `csc`.`store_id` = `STORE_ID` 0264 GROUP BY `csc`.`store_category_id` 0265 ORDER BY `csc`.`order`, `pc`.`title` 0266 ; 0267 0268 SET @`NEW_ORDER` := 0; 0269 0270 UPDATE `tmp_store_cat` 0271 SET `order` = (@`NEW_ORDER` := @`NEW_ORDER` + 10); 0272 0273 SELECT `sct`.`lft`, 0274 `sct`.`rgt`, 0275 `sct`.`project_category_id` AS `id`, 0276 `sct`.`title`, 0277 `scpc`.`count_product` AS `product_count`, 0278 `sct`.`xdg_type`, 0279 `sct`.`name_legacy`, 0280 if(`sct`.`rgt` - `sct`.`lft` = 1, 0, 1) AS `has_children`, 0281 (SELECT `project_category_id` 0282 FROM `stat_cat_tree` AS `sct2` 0283 WHERE `sct2`.`lft` < `sct`.`lft` 0284 AND `sct2`.`rgt` > `sct`.`rgt` 0285 ORDER BY `sct2`.`rgt` - `sct`.`rgt` 0286 LIMIT 1) AS `parent_id` 0287 FROM `tmp_store_cat` AS `cfc` 0288 JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`) 0289 #JOIN `stat_cat_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` is null 0290 JOIN `stat_store_prod_count` AS `scpc` 0291 ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` IS NULL 0292 WHERE `cfc`.`store_id` = `STORE_ID` 0293 ORDER BY `cfc`.`order`, `sct`.`lft`; 0294 END$$ 0295 0296 0297 DELIMITER ;