我有一个表格
例如,类别农业的
在我的网站上,我想显示顶级分类,并在每个分类下面仅显示5个子分类。但是查询检索它们比我想象的要困难。
如果我执行以下查询:
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 (
.
.
.
这看起来非常混乱和硬编码,但这是我现在能想到的唯一解决方案。还有其他解决方法吗?
谢谢!