diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 5ff90048a..6dcd8e695 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -1216,6 +1216,7 @@ func GetTopCategoriesByStoreIDs(db *DaoDB, storeIDs []int, limit int) (skuCatego func GetStoreSkuCategories(db *DaoDB, storeID, parentID int) (catList []*model.SkuCategory, err error) { sql := ` + SELECT * FROM( SELECT t1.* FROM sku_category t1 @@ -1238,19 +1239,35 @@ func GetStoreSkuCategories(db *DaoDB, storeID, parentID int) (catList []*model.S sql += " AND t1.parent_id = ?" sqlParams = append(sqlParams, parentID) } - sql += " ORDER BY t1.level, t1.seq" - if err = GetRows(db, &catList, sql, sqlParams...); err == nil && len(catList) > 0 { - parentIDMap := make(map[int]int) - for _, v := range catList { - parentIDMap[v.ParentID] = 1 - } - paretnCats, err2 := GetCategories(db, -1, 0, jxutils.IntMap2List(parentIDMap), false) - if err = err2; err == nil { - catList = append(catList, paretnCats...) - } else { - catList = nil - } + sql += ` UNION + SELECT + DISTINCT + t3.* + FROM sku_category t1 + JOIN + ( + SELECT DISTINCT t3.category_id + FROM store_sku_bind t1 + JOIN sku t2 ON t2.id = t1.sku_id AND t2.deleted_at = ? AND t2.status = ? + JOIN sku_name t3 ON t3.id = t2.name_id AND t3.deleted_at = ? AND t3.status = ? + WHERE t1.deleted_at = ? AND t1.status = ? AND t1.store_id = ? + ) t2 ON t2.category_id = t1.id + JOIN sku_category t3 ON t3.id = t1.parent_id AND t3.deleted_at = ? + WHERE t1.deleted_at = ? + ` + sqlParams = append(sqlParams, utils.DefaultTimeValue, model.SkuStatusNormal, + utils.DefaultTimeValue, model.SkuStatusNormal, + utils.DefaultTimeValue, model.SkuStatusNormal, storeID, + utils.DefaultTimeValue, utils.DefaultTimeValue, + ) + if parentID >= 0 { + sql += " AND t1.parent_id = ?" + sqlParams = append(sqlParams, parentID) } + sql += ` + ) a + ORDER BY a.level, a.seq` + err = GetRows(db, &catList, sql, sqlParams...) return catList, err }