Javascript 编写菜单系统的SQL查询
我正在为一个应用程序创建一个菜单系统,我对如何创建一个数据库查询有点困惑 我的桌子是这样的: 绿色行是“父菜单”,其他行是子菜单 我需要帮助编写一个TSQL查询,对显示的数据进行排序,以显示父级,然后显示其子级(如果有) 分拣顺序为: 然后按父对象的子对象,然后按顺序(数值) 以下是我的数据库的外观:Javascript 编写菜单系统的SQL查询,javascript,sql,sql-server,tsql,Javascript,Sql,Sql Server,Tsql,我正在为一个应用程序创建一个菜单系统,我对如何创建一个数据库查询有点困惑 我的桌子是这样的: 绿色行是“父菜单”,其他行是子菜单 我需要帮助编写一个TSQL查询,对显示的数据进行排序,以显示父级,然后显示其子级(如果有) 分拣顺序为: 然后按父对象的子对象,然后按顺序(数值) 以下是我的数据库的外观: 对于sql server,您可以执行递归查询,如下所示: with cte as ( select m.id, m.parent_id, m.title,
对于sql server,您可以执行递归查询,如下所示:
with cte as (
select
m.id, m.parent_id, m.title,
right('00000' + cast(m.ordering as nvarchar(max)), 5) as ordering
from menu as m
where m.parent_id is null
union all
select
m.id, m.parent_id, m.title,
c.ordering + '.' + right('00000' + cast(m.ordering as nvarchar(max)) , 5) as ordering
from menu as m
inner join cte as c on c.id = m.parent_id
)
select *
from cte
order by ordering
对于sql server,您可以执行递归查询,如下所示:
with cte as (
select
m.id, m.parent_id, m.title,
right('00000' + cast(m.ordering as nvarchar(max)), 5) as ordering
from menu as m
where m.parent_id is null
union all
select
m.id, m.parent_id, m.title,
c.ordering + '.' + right('00000' + cast(m.ordering as nvarchar(max)) , 5) as ordering
from menu as m
inner join cte as c on c.id = m.parent_id
)
select *
from cte
order by ordering
解决方案():
结果:
id title parentID order overall_order
-- --------------- ----------- ----- -------------
11 Home 0 1 /1/
12 Settings 0 2 /2/
13 Change Password 12 4 /2/4/
14 Update Profile 12 5 /2/5/
15 Search 0 3 /3/
16 Options 15 6 /3/6/
解决方案():
结果:
id title parentID order overall_order
-- --------------- ----------- ----- -------------
11 Home 0 1 /1/
12 Settings 0 2 /2/
13 Change Password 12 4 /2/4/
14 Update Profile 12 5 /2/5/
15 Search 0 3 /3/
16 Options 15 6 /3/6/
嗯,我还是有点困惑,不知道该如何适应我的桌子:/为什么?只需将其他列添加到selectIt,它似乎给了我比我最后预期的更多的数据:奇怪的是,它什么也没有返回now@CarlHussey请看sql fiddle演示,您必须在cte.id=menu.parent\u idhm上加入cte,我仍然对如何使其适应我的表感到有点困惑:/为什么?只需将其他列添加到selectIt,它似乎给了我比我最后预期的更多的数据:奇怪的是,它什么也没有返回now@CarlHussey请参阅sql fiddle演示,您必须在cte.id=menu.parent\u id上加入cte。我可以将最终输出转换为xml吗?对于XML路径('menu')、类型、元素、根('ROOT')@CarlHussey:我看不到任何关于XML输出的要求。您可以尝试:-)我尝试在最后一个select语句之后添加它,但它不喜欢it@BogdanSahlean您的查询可能会给出错误的排序,请参阅-15将在4之前。在您更改它之后-它将反映我的答案:)@CarlHussey:您应该从一开始就发布完整的问题,包括有关XML输出的信息。每个细节都很重要。当有人试图帮助你时,不说原因就说“它不喜欢它”是不好的?对于XML路径('menu')、类型、元素、根('ROOT')@CarlHussey:我看不到任何关于XML输出的要求。您可以尝试:-)我尝试在最后一个select语句之后添加它,但它不喜欢it@BogdanSahlean您的查询可能会给出错误的排序,请参阅-15将在4之前。在您更改它之后-它将反映我的答案:)@CarlHussey:您应该从一开始就发布完整的问题,包括有关XML输出的信息。每个细节都很重要。当有人试图帮助你时,不说原因就说“它不喜欢它”是不好的。至少你可以执行
SELECT@@VERSION
。至少你可以执行SELECT@@VERSION
。