1

私は4つのテーブルに基づく階層メニューの構築に取り組んでいます。研究を行った後、私が考えることができる唯一の解決策は、これまでのところUNIONでそれを行うことです。私は近くにいますが、それでも望ましい結果は得られません。

4私が使用しているテーブルは

  1. PKとしてPageIDを持つページテーブル(cmsの実際のページを保持します)
  2. FKとしてPageIDを持つ記事テーブル(記事があります)
  3. FKとしてPageIDを持つ記事カテゴリテーブル(このテーブルには記事カテゴリがあります)
  4. 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
4

2 に答える 2

0

外側の select ステートメントで order by を使用しました。明確なステートメントを使用しないことによる順序として、

したがって、副選択で DISTINCT を実行し、外部選択で ORDER BY を実行します。

これが問題の解決に役立つことを願っています。

于 2013-01-03T06:06:28.690 に答える
0

すべての SELECT ステートメントで DISTINCT が必要です

SELECT DISTINCT PID, MENU, Handler, PageLangID, ParentID,IssueID, CatID, MenuPosition
...
于 2013-01-03T07:33:12.437 に答える