如何编写SQL查询WooCommerce的Simple/Variable/Variation三类产品
WooCommerce三类产品区分SQL方案
你之前Variable产品查询不符合预期的核心原因:子查询中SELECT *配合GROUP BY parent_id的写法在严格SQL模式下返回的非分组字段值不确定,且没有过滤子产品记录,导致结果混淆。以下是三类产品的兼容高效查询语句:
1. Simple产品查询
SELECT t.* FROM $table_name t INNER JOIN ( SELECT parent_id FROM $table_name WHERE item_id = parent_id GROUP BY parent_id HAVING COUNT(*) = 1 ) AS simple_parent ON t.parent_id = simple_parent.parent_id WHERE t.item_id = t.parent_id
完全匹配你定义的Simple产品逻辑,规避了SELECT *加GROUP的语法兼容性问题。
2. Variable产品查询(修正后)
SELECT t.* FROM $table_name t INNER JOIN ( SELECT parent_id FROM $table_name GROUP BY parent_id HAVING COUNT(*) > 1 ) AS variable_parent ON t.parent_id = variable_parent.parent_id WHERE t.item_id = t.parent_id
先统计出现次数大于1的parent_id(即有子产品的父级ID),再匹配父级自身的记录,不会混进子产品数据,完全符合Variable产品的定义。
3. Variation产品查询
原有逻辑正确,可补充脏数据校验:
SELECT t.* FROM $table_name t WHERE t.item_id != t.parent_id -- 可选增加校验,排除父级不存在的无效子产品 AND EXISTS ( SELECT 1 FROM $table_name p WHERE p.item_id = t.parent_id AND p.item_id = p.parent_id )
如果表体量较大,建议给item_id、parent_id字段加联合索引,可大幅提升查询效率,按你规划的Simple→Variable→Variation顺序导入即可避免父级关联失败的问题。
内容的提问来源于stack exchange,提问作者Marin
相关产品推荐
相关产品推荐

