如何根据示例数据库结构从不同的表创建分层菜单

时间:2013-01-02 11:56:37

标签: c# asp.net sql database sql-server-2008

我正在开发一个带有菜单结构的网站,以便它可以从下面的多个表中读取子菜单示例菜单示例

enter image description here

我有几个表,如pg_Pages,art_Article,art_Categories,Magazine每个表在pg_Pages表中都有一个带PK的FK PageID。

我想创建一个sql查询,它将从这些表中读取数据,并创建一个分层的菜单结构,每个链接指向正确的页面。

我可能需要将几个查询字符串作为href的一部分传递,例如PageID, LanguageID, IssueID and CategoryID

示例链接

Home = Default.aspx?LanguageId=1&IssueID=101&PageID=1

About Us = Page.aspx?LanguageId=1&IssueID=101&PageID=2

Categories = Article-Category.aspx?LanguageId=1&IssueID=101&PageID=6

--Politics = Article-Category.aspx?LanguageId=1&IssueID=101&PageID=6&CategoryID=1

--Economy= Article-Category.aspx?LanguageId=1&IssueID=101&PageID=6&CategoryID=2

--Business= Article-Category.aspx?LanguageId=1&IssueID=101&PageID=6&CategoryID=16

Multimedia = Multimedia.aspx?LanguageId=1&IssueID=101&PageID=10

--Video= Video.aspx?LanguageId=1&IssueID=101&PageID=11

我不确定如何以最好的方式处理这个没有错误的余地,因为我必须将不同的查询字符串传递给不同的菜单我有点困惑如何处理这种方法,我应该用Union创建一个多sql查询处理这个或不同的东西。我需要这个asp.net网站

我还添加了示例sql查询,&每个表的输出

SQL

SELECT PageId AS ParentID,SUBSTRING(PageName,0,20) AS PARENT_MENU,SUBSTRING(PageInternalLinkURL,0,24) AS PageHandler, PageLinkPosition,SUBSTRING(PageLayoutPosition,0,14) AS MENU_Type,PageLangID,PageInheritance  FROM pg_Pages

SELECT p.PageID as ParentID, SUBSTRING(c.ArticleCategoryName,0,20) AS CHILD_MENU,SUBSTRING(p.PageInternalLinkURL,0,24) AS PageHandler,              ArticlePostion,ArticleID AS CHILDID,c.ArticleCategoryID,IssueID,LanguageID FROM art_Articles a JOIN art_Category  c ON a.ArticleCategoryID = c.ArticleCategoryID
JOIN pg_pages p ON p.PageID = a.PageID

SELECT p.PageID AS ParentID, IssueCode as CHILD_MENU,SUBSTRING(p.PageInternalLinkURL,0,24) AS PageHandler, m.IssueCode,IssueID AS CHILDID,CurrentIssue,IssueDate,LangID FROM Magazine m JOIN pg_pages p ON m.PageID = p.PageID 

SELECT p.PageID AS ParentID, SUBSTRING(c.ArticleCategoryName,0,20) AS CHILD_MENU,SUBSTRING(p.PageInternalLinkURL,0,24) AS PageHandler, LangID,ArticleCategoryID AS CHILDID FROM art_Category c JOIN pg_Pages p ON c.PageID = p.PageID 

输出

ParentID    PARENT_MENU          PageHandler              PageLinkPosition MENU_Type      PageLangID  PageInheritance
----------- -------------------- ------------------------ ---------------- -------------- ----------- ---------------
1           Home                 Default.aspx             10               TopMenu        1           0
2           About Us             Page.aspx                20               TopMenu        1           0
3           News                 News.aspx                30               TopMenu        1           0
4           Publication          Publication.aspx         40               TopMenu        1           0
5           Articles             Articles.aspx            20               TopMenu        1           0
6           Categories           Article-Category.aspx    25               TopMenu        1           0
10          Multimedia           Multimedia.aspx          60               TopMenu        1           0
11          Video                Videos.aspx              10               SubMenu        1           10
12          Archive              Default.aspx             40               TopMenu        1           0

ParentID    CHILD_MENU           PageHandler              ArticlePostion CHILDID     ArticleCategoryID IssueID     LanguageID
----------- -------------------- ------------------------ -------------- ----------- ----------------- ----------- -----------
5           Politics             Articles.aspx            10             12          1                 1           1
5           Politics             Articles.aspx            10             13          1                 3           1
5           Politics             Articles.aspx            10             14          1                 4           1
5           Politics             Articles.aspx            1              15          1                 5           1
5           Politics             Articles.aspx            20             16          1                 5           1
5           Business             Articles.aspx            30             17          16                5           1
5           Group News           Articles.aspx            40             18          6                 5           1
5           Infrastructure       Articles.aspx            50             23          17                5           1
5           Group News           Articles.aspx            60             24          6                 5           1
5           Book Review          Articles.aspx            70             25          18                5           1


ParentID    CHILD_MENU  PageHandler              IssueCode   CHILDID     CurrentIssue IssueDate               LangID
----------- ----------- ------------------------ ----------- ----------- ------------ ----------------------- -----------
12          106         Default.aspx             106         1           0            2012-09-01 00:00:00.000 1
12          106         Default.aspx             106         2           1            2012-09-01 00:00:00.000 2
12          102         Default.aspx             102         3           1            2011-11-01 00:00:00.000 1
12          103         Default.aspx             103         4           1            2012-02-01 00:00:00.000 1
12          109         Default.aspx             109         5           1            2012-12-01 00:00:00.000 1


ParentID    CHILD_MENU           PageHandler              LangID      CHILDID
----------- -------------------- ------------------------ ----------- -----------
6           Politics             Article-Category.aspx    1           1
6           Economy              Article-Category.aspx    1           2
6           Culture              Article-Category.aspx    1           3
6           Sports               Article-Category.aspx    1           4
6           xxxxxxxxxxxxxxxxxxx  Article-Category.aspx    1           5
6           Group News           Article-Category.aspx    1           6
6           People               Article-Category.aspx    1           7
6           Editorial Message    Article-Category.aspx    1           8
6           Chairman's Message   Article-Category.aspx    1           9
6           Business             Article-Category.aspx    1           16
6           Infrastructure       Article-Category.aspx    1           17
6           Book Review          Article-Category.aspx    1           18
6           Finance              Article-Category.aspx    1           19
6           Lifestyle            Article-Category.aspx    1           20
6           Others               Article-Category.aspx    NULL        21

2 个答案:

答案 0 :(得分:1)

根据你的问题......

- 通过 with clause 创建一个sql查询,并创建一个单独的表来显示所有记录。之后选择任何html表格菜单...在ul标签设置主菜单项(为此你可以使用数据阅读器等控制)。这很容易....

之后如果你没有让我知道......我制作了这种类型的菜单....我将提供示例代码......

答案 1 :(得分:0)

处理建筑菜单有许多不同的方法。

  • 构建存储过程以完成所有艰苦工作。
  • 从数据库中选择数据,并在应用程序代码中构建字符串。
  • 从数据库构建一个文件,您可以在“make”时包含该文件。
  • 在SQL查询中执行所有操作。

菜单之类的最不喜欢的选项是在SQL查询中执行所有操作。如果我在你的鞋子里,我认为我的第一选择是建立一个我可以在“制造”时间包含的文件。我的第二选择是从数据库中选择数据,并在应用程序代码中构建字符串。

构建要在make时包含的文件将会更好。在SQL中编码更容易,因为您需要的简单查询数量并不重要。 (它是在“make”时间完成的,而不是在运行时完成的。)它处理任意复杂度的菜单,没有运行时惩罚。 (同样,因为它是在制作时完成的。)但它可能会产生维护问题,具体取决于菜单需要更改的频率。