Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 编写菜单系统的SQL查询_Javascript_Sql_Sql Server_Tsql - Fatal编程技术网

Javascript 编写菜单系统的SQL查询

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,

我正在为一个应用程序创建一个菜单系统,我对如何创建一个数据库查询有点困惑

我的桌子是这样的:

绿色行是“父菜单”,其他行是子菜单

我需要帮助编写一个TSQL查询,对显示的数据进行排序,以显示父级,然后显示其子级(如果有)

分拣顺序为:

然后按父对象的子对象,然后按顺序(数值)

以下是我的数据库的外观:


对于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