Shopify GraphQL查询能否合并MANUAL与BEST_SELLING排序为单请求
可以实现类似MySQL虚拟字段的效果,将2次查询合并为1次,具体实现逻辑如下:
实现方案
- 新增
manual_sort_position关联字段
在集合与商品的关联表中新增可读写的排序位字段,存储该商品在对应集合下的手动排序权重,管理员后台调整手动排序顺序时同步更新该字段值即可,字段逻辑和你提到的MySQL虚拟字段一致,可直接随商品基础数据批量返回。 - 调整GraphQL查询逻辑
修改原有查询语句,单次请求拉取所有排序需要的字段:价格、标题、创建时间、manual_sort_position、销量数据(用于BEST_SELLING排序),示例调整后的查询参考:`query ($handle: String!, $numProducts: Int!) { collectionByHandle(handle: $handle) { id handle description descriptionHtml title image { id originalSrc altText } products(first: $numProducts) { pageInfo { hasNextPage hasPreviousPage } edges { node { id title priceRange { minVariantPrice { amount } } createdAt manualSortPosition // 新增的手动排序位字段 totalSales // 用于畅销排序的字段 ... } } } } } ` - 前端全排序逻辑覆盖
拿到全量字段后,JS侧可直接实现所有8种排序逻辑:price、title、created的正倒序、manual(按manual_sort_position排序)、BEST_SELLING(按销量排序),无需再发起额外查询。
注意事项
如果单集合商品量超过500,建议做分页预加载,先拉取前3-5页的商品数据做前端排序,用户翻页到预加载范围外再做增量拉取即可,不会影响前端性能。
内容的提问来源于stack exchange,提问作者mk010101
相关产品推荐
相关产品推荐

