我有,我存储有关章节的详细信息的表格,我在指数下表以显示数据排序数据
章
1.1章第1个
1.2章第2页
第二章
2.1第二章第1页
2.2第二章第2页
第三章
标题1
标题2
标题三
3.1第三章Page 1
3.2第三章第2页
3.3第三章第3页
我们所用的排序或未排序的顺序插入在数据库中的数据。但数据应该以排序的顺序显示基于父页和子页的pageOrder
我已经设置了SQL小提琴,但由于某种原因,我无法保存SQL。下面你会发现小提琴环节和细节
CREATE TABLE [Book]
(
[id] int,
[Chapter] varchar(20),
[PageOrder] int,
[parentID] int
);
INSERT INTO [Book] ([id], [Chapter], [PageOrder], [parentID])
VALUES
('1', 'Chapter One', 1, 0),
('2', 'Chapter Two', 2, 0),
('3', 'Chapter Three', 3, 0),
('4', 'Chapter Four', 4, 0),
('5', 'Chapter Five', 5, 0),
('6', 'Chapter One Page 1', 1, 1),
('7', 'Chapter One Page 2', 2, 1),
('8', 'Chapter One Page 3', 3, 1),
('9', 'Chapter One Page 4', 4, 1),
('10', 'Chapter Two Page 1', 1, 2),
('11', 'Chapter Two Page 3', 3, 2),
('12', 'Chapter Two Page 2', 2, 2),
('13', 'Chapter Three Tite 1', 0, 3),
('14', 'Chapter Three Tite 2', 0, 3),
('15', 'Chapter Three Tite 3', 0, 3),
('16', 'Chapter Three Page 2', 2, 3),
('17', 'Chapter Three Page 3', 3, 3),
('18', 'Chapter Three Page 1', 1, 3);
WITH CTE(ID, parentID, Chapter, PageOrder, Depth, SortCol) AS
(
SELECT
ID, parentID, Chapter, PageOrder, 0,
CAST(ID AS varbinary(max))
FROM Book
WHERE parentID = 0
UNION ALL
SELECT
d.ID, d.parentID, d.Chapter, d.PageOrder, p.Depth + 1,
CAST(SortCol + CAST(d.ID AS binary(4)) AS varbinary(max))
FROM Book AS d
JOIN CTE AS p ON d.parentID = p.ID
)
SELECT
ID, parentID, Chapter, PageOrder, Depth,
REPLICATE('--', Depth) + Chapter as PageName
FROM CTE
ORDER BY SortCol
这CTE查询排序数据,但子页面没有适当的排序子页面在它们那里保存在数据库
SqlFiddle链接http://www.sqlfiddle.com/#!3/9770a/1排序顺序显示建立SortCol
对于( '12', '第二章第2',2,1)记录的父ID为2或1 u能确认?因为你是第2章所以页面顺序是2。 – Buddi
是的你是正确的,事件改变拖2不会做任何改变的结果 – Learning