You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Magento 1.9:获取将商品X设为Upsell的商品列表

高效实现商品X页面展示所有将其设为Upsell的同分类商品

嘿,这个需求我刚好在做换货系统时碰到过类似的,完全不用遍历整个商品集合,给你几个高效的方案:

1. 直接用数据库关联查询(最推荐)

电商系统里的Upsell关联关系一般都会存在专门的关联表(比如product_upsell),字段大概是parent_product_id(设置Upsell的商品ID)、upsell_product_id(被设置为Upsell的商品ID),再结合分类ID过滤,直接写SQL就能精准捞到目标商品:

SELECT p.product_name
FROM products p
INNER JOIN product_upsell upl 
  ON p.id = upl.parent_product_id
WHERE upl.upsell_product_id = [商品X的ID]
  AND p.category_id = [目标分类ID]

优化点:给product_upsell表的upsell_product_id和parent_product_id加联合索引,给products表的category_id加索引,这会让查询速度快到飞起,完全不用碰全量商品数据。

2. 利用电商平台API的过滤参数(如果是用成熟平台)

如果你用的是WooCommerce、Shopify这类成熟电商系统,它们的API都支持直接过滤关联关系+分类:

  • WooCommerce REST API示例:

    GET /wp-json/wc/v3/products?category=[目标分类ID]&meta_key=_upsell_ids&meta_value=[商品X的ID]&meta_compare=LIKE
    

    这里meta_compare=LIKE是因为_upsell_ids存储的是商品ID数组,用LIKE匹配包含商品X ID的记录。

  • Shopify GraphQL示例:

    query GetUpsellingProducts {
      products(first: 50, query: "product_type:[目标分类名称] AND upsell:[商品X的Handle]") {
        edges {
          node {
            title
          }
        }
      }
    }
    

3. 自定义系统里的ORM关联优化

如果是自己开发的系统,可以给商品模型加一个反向关联:

// 以Laravel为例,在Product模型中
public function productsThatUpsellMe()
{
    return $this->hasMany(Product::class, 'id', 'upsell_product_id')
                ->where('category_id', [目标分类ID]);
}

之后调用$productX->productsThatUpsellMe就能直接拿到所有符合条件的商品,ORM会自动生成高效的SQL查询,不用手动处理遍历逻辑。

额外优化:缓存结果

因为Upsell关联关系不会频繁变动,把查询到的商品列表缓存起来(比如Redis、文件缓存或者平台自带的缓存机制),下次请求直接取缓存,进一步降低数据库压力。

之前我用第一个方案+缓存,处理几百个关联商品的场景,页面加载速度比遍历全量集合快了至少10倍,完全解决了性能问题。

内容的提问来源于stack exchange,提问作者Niels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:15:35