我有一个表,其中product_category
包含字段id
、name
和。parent_id
level
例如,类别农业有id = 75
和。子类别玉米、小麦、黑麦等有和。level = 1
parent_id = NULL
level = 2
parent_id = 75
在我的站点中,我想显示顶级类别,在每个类别下方,只有 5 个子类别。但是做一个查询来检索它们比我想象的要难。
如果我执行以下查询:
SELECT a.name, a.parent_id FROM product_category a
WHERE (
SELECT b.level
FROM product_category b
WHERE b.id = a.parent_id
LIMIT 1
) = 1
我检索所有顶级类别和子类别,但有数千个子类别,所以当我只想要每个类别的前 5 个时,它会非常不必要地昂贵。
如果我执行以下操作:
SELECT a.name, a.parent_id FROM product_category a
WHERE (
SELECT b.level
FROM product_category b
WHERE b.id = a.parent_id
LIMIT 1
) = 1
LIMIT 5
它只检索 5 个子类别,而不是每个顶级类别的 5 个子类别。
然后我想到了以下方式:
(
SELECT a.name, a.parent_id FROM product_category a
WHERE parent_id = 12
LIMIT 5
) UNION (
SELECT a.name, a.parent_id FROM product_category a
WHERE parent_id = 21
LIMIT 5
) UNION (
SELECT a.name, a.parent_id FROM product_category a
WHERE parent_id = 75
LIMIT 5
) UNION (
.
.
.
这看起来很脏且硬编码,但这是我现在能想到的唯一方法。有没有其他解决方案?
谢谢!