package main // 诊断:复现 FeaturedIDs("images", 30) 的 SQL,验证热门品牌排名数据是否合理。 import ( "fmt" "gorm.io/driver/postgres" "gorm.io/gorm" ) const dsn = "postgres://fashion:fashion_dev_2026@127.0.0.1:5432/fashion?sslmode=disable" func main() { db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { panic(err) } // 1) 复现 FeaturedIDs:按图片总数 DESC 取前 30 type Row struct { BrandID uint32 `gorm:"column:brand_id"` Images int64 `gorm:"column:images"` Shows int64 `gorm:"column:shows"` } var rows []Row db.Raw(` SELECT brand_id, COALESCE(SUM(image_count),0) AS images, COUNT(*) AS shows FROM brand_runways WHERE is_deleted = 0 GROUP BY brand_id ORDER BY images DESC LIMIT 30 `).Scan(&rows) fmt.Println("== FeaturedIDs(images, 30) 原始排名 ==") for i, r := range rows { var name string db.Raw(`SELECT name_en FROM brands WHERE id = ?`, r.BrandID).Scan(&name) fmt.Printf("%2d. brand_id=%-6d images=%-6d shows=%-4d %s\n", i+1, r.BrandID, r.Images, r.Shows, name) } // 2) image_count 分布:有多少品牌有图、多少归零 var zeroBrands, hasImgBrands int64 var totalRows, zeroRows int64 db.Raw(`SELECT COUNT(*) FROM (SELECT brand_id, SUM(image_count) s FROM brand_runways WHERE is_deleted=0 GROUP BY brand_id) t WHERE s = 0`).Scan(&zeroBrands) db.Raw(`SELECT COUNT(*) FROM (SELECT brand_id, SUM(image_count) s FROM brand_runways WHERE is_deleted=0 GROUP BY brand_id) t WHERE s > 0`).Scan(&hasImgBrands) db.Raw(`SELECT COUNT(*) FROM brand_runways WHERE is_deleted=0`).Scan(&totalRows) db.Raw(`SELECT COUNT(*) FROM brand_runways WHERE is_deleted=0 AND image_count=0`).Scan(&zeroRows) fmt.Printf("\n== image_count 分布 ==\n有图品牌=%d 零图品牌=%d | 走秀总行=%d 其中 image_count=0 的行=%d\n", hasImgBrands, zeroBrands, totalRows, zeroRows) // 3) 对比口径:按走秀数(shows) DESC 前 10 var byShows []Row db.Raw(` SELECT brand_id, COALESCE(SUM(image_count),0) AS images, COUNT(*) AS shows FROM brand_runways WHERE is_deleted = 0 GROUP BY brand_id ORDER BY shows DESC LIMIT 10 `).Scan(&byShows) fmt.Println("\n== 若按 shows DESC 前 10 ==") for i, r := range byShows { var name string db.Raw(`SELECT name_en FROM brands WHERE id = ?`, r.BrandID).Scan(&name) fmt.Printf("%2d. brand_id=%-6d images=%-6d shows=%-4d %s\n", i+1, r.BrandID, r.Images, r.Shows, name) } }