私は4つのテーブルに基づく階層メニューの構築に取り組んでいます。研究を行った後、私が考えることができる唯一の解決策は、これまでのところUNIONでそれを行うことです。私は近くにいますが、それでも望ましい結果は得られません。
4私が使用しているテーブルは
- PKとしてPageIDを持つページテーブル(cmsの実際のページを保持します)
- FKとしてPageIDを持つ記事テーブル(記事があります)
- FKとしてPageIDを持つ記事カテゴリテーブル(このテーブルには記事カテゴリがあります)
- FKとしてPageIDを持つマガジンテーブル(マガジンテーブルはマガジン情報を保持します)
この質問に直接関連する前の質問に対して行われたいくつかの提案に基づいて、データベースにいくつかの変更を加える必要がありました。前の質問にはデータベースに関する詳細があります。
階層メニューを作成するにはこれらの列PID, MENU, Handler,PageLangID, ParentID,IssueID, CatID,MenuPosition
が必要です。必要な列を取得するために以下を記述しましたが、メニューでDISTINCTを実行できないため、一意の行のみを取得し、その結果セットに基づいてメニューを作成できます。
追加しようとすると、DISTINCT (Menu)
構文エラーが発生します。
前の質問で述べた私の要件に基づいて、このアプローチが適切かどうか、またはあいまいではない、またはより専門的な他のアプローチを採用する必要があるかどうかはわかりません
QUERY
SELECT PID, MENU, Handler, PageLangID, ParentID,IssueID, CatID, MenuPosition
FROM (
--Pages Table
SELECT PageId AS PID,SUBSTRING(PageName,0,20) AS MENU,SUBSTRING(PageInternalLinkURL,0,24) AS Handler, PageLangID,PageInheritance AS ParentID, 1 AS IssueID, 1 AS CatID,
PageLinkPosition as MenuPosition FROM pg_Pages WHERE PageLangID = 1
UNION
--Article Table
SELECT p.PageID as PID, SUBSTRING(c.ArticleCategoryName,0,20) AS MENU,SUBSTRING(p.PageInternalLinkURL,0,24) AS Handler,LanguageID,p.PageID AS ParentID,IssueID,c.ArticleCategoryID AS CatID,
1 AS MenuPosition FROM art_Articles a JOIN art_Category c ON a.ArticleCategoryID = c.ArticleCategoryID JOIN pg_pages p ON p.PageID = a.PageID WHERE LanguageID =1
UNION
--Article Category Table
SELECT p.PageID AS PID, SUBSTRING(c.ArticleCategoryName,0,20) AS MENU,SUBSTRING(p.PageInternalLinkURL,0,24) AS Handler, LangID,p.PageID,1, ArticleCategoryID,
1 AS MenuPosition FROM art_Category c JOIN pg_Pages p ON c.PageID = p.PageID WHERE LangID =1
UNION
--Magazine Table
SELECT p.PageID AS PID, CAST(IssueCode AS varchar(10)),SUBSTRING(p.PageInternalLinkURL,0,24) AS Handler,LangID,p.PageID AS ParentID, m.IssueID AS IssueID, 1,
1 AS MenuPosition FROM Magazine m JOIN pg_pages p ON m.PageID = p.PageID WHERE LangID =1
) AS T WHERE T.PageLangID = 1 ORDER BY MenuPosition
出力
PID MENU Handler PageLangID ParentID IssueID CatID MenuPosition
----------- -------------------- ------------------------ ----------- ----------- ----------- ----------- ------------
5 Book Review Articles.aspx 1 5 5 18 1
5 Business Articles.aspx 1 5 5 16 1
5 Group News Articles.aspx 1 5 5 6 1
5 Infrastructure Articles.aspx 1 5 5 17 1
5 Politics Articles.aspx 1 5 1 1 1
5 Politics Articles.aspx 1 5 3 1 1
5 Politics Articles.aspx 1 5 4 1 1
5 Politics Articles.aspx 1 5 5 1 1
6 Book Review Article-Category.aspx 1 6 1 18 1
6 Business Article-Category.aspx 1 6 1 16 1
6 Chairman's Message Article-Category.aspx 1 6 1 9 1
6 Culture Article-Category.aspx 1 6 1 3 1
6 Economy Article-Category.aspx 1 6 1 2 1
6 Editorial Message Article-Category.aspx 1 6 1 8 1
6 Finance Article-Category.aspx 1 6 1 19 1
6 Group News Article-Category.aspx 1 6 1 6 1
6 Habtoor Leighton Gr Article-Category.aspx 1 6 1 5 1
6 Infrastructure Article-Category.aspx 1 6 1 17 1
6 Lifestyle Article-Category.aspx 1 6 1 20 1
6 People Article-Category.aspx 1 6 1 7 1
6 Politics Article-Category.aspx 1 6 1 1 1
6 Sports Article-Category.aspx 1 6 1 4 1
12 102 Default.aspx 1 12 3 1 1
12 103 Default.aspx 1 12 4 1 1
12 106 Default.aspx 1 12 1 1 1
12 109 Default.aspx 1 12 5 1 1
1 Home Default.aspx 1 0 1 1 10
11 Video Videos.aspx 1 10 1 1 10
2 About Us Page.aspx 1 0 1 1 20
5 Articles Articles.aspx 1 0 1 1 20
6 Categories Article-Category.aspx 1 0 1 1 25
3 News News.aspx 1 0 1 1 30
12 Archive Default.aspx 1 0 1 1 40
10 Multimedia Multimedia.aspx 1 0 1 1 60