我在数据库中有一个类别和子类别的表。其内部结构为:
id int not null primary
name text
subcatfrom int
它包含一些类别及其子类别的行。我想要“SELECT”sql 命令来获取类别,并为每个根类别对其子类别进行分组,如下所示:
-cat1
--subcat1
--subcat2
-cat2
--subcat1
--subcat2
这可能吗?
最佳答案
最初的问题希望子类别位于单独的行上。这是一种方法:
select name
from ((select category as name, 1 as iscat, category as sortorder
from t
) union all
(select tsub.category as name 0 as iscat, t.category as sortorder
from t join
tsub on
on t.subcategory_id = s.category_id
)
) a
where not exists (select 1 from category c where c.subcategory_id = a.sortorder limit 1)
order by sortorder, iscat desc, name
这是在做什么?内部联合 all 将所有类别和子类别聚集在一起。它在表中分配您想要的内容以及用于排序的信息。整体排序是按“父”类别名称进行的。
where 子句将此数据限制为不属于其他任何子类别(顶级类别)的类别。
关于mysql - 我怎么做这个sql技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12092029/