我正在开发一个带有菜单结构的网站,以便它可以从下面的多个表中读取子菜单示例菜单示例
我有几个表,如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
答案 0 :(得分:1)
根据你的问题......
- 通过 with clause 创建一个sql查询,并创建一个单独的表来显示所有记录。之后选择任何html表格菜单...在ul标签设置主菜单项(为此你可以使用数据阅读器等控制)。这很容易....
之后如果你没有让我知道......我制作了这种类型的菜单....我将提供示例代码......
答案 1 :(得分:0)
处理建筑菜单有许多不同的方法。
菜单之类的最不喜欢的选项是在SQL查询中执行所有操作。如果我在你的鞋子里,我认为我的第一选择是建立一个我可以在“制造”时间包含的文件。我的第二选择是从数据库中选择数据,并在应用程序代码中构建字符串。
构建要在make时包含的文件将会更好。在SQL中编码更容易,因为您需要的简单查询数量并不重要。 (它是在“make”时间完成的,而不是在运行时完成的。)它处理任意复杂度的菜单,没有运行时惩罚。 (同样,因为它是在制作时完成的。)但它可能会产生维护问题,具体取决于菜单需要更改的频率。