0
我有一个使用SQL Server层次结构id设置的产品类别表,我想在CMS中创建一个自动完成下拉菜单,该下拉菜单返回搜索匹配的类别,而不仅仅是显示匹配的类别名称还显示它的层次结构/路径,例如SQL Server Hierarchy ID搜索记录并在结果中包含所有相关父项
用户开始搜索“猫”,并在自动完成他们看到
- 宠物用品>猫
- 宠物用品>猫>猫粮
- 宠物用品>毛虫
- 宠物活动>狗>捕捉游戏
是否有简单的方法可以做到这一点?我发现的例子集中于选择首先选择的单个特定节点的父项,但我找不到任何用于选择多个节点并随后选择所有父项作为匹配节点的示例。
我很高兴将结果按照上述格式,一旦我从数据库中检索到它们,但它获得的数据似乎是棘手的部分。
我使用的是SQL Server 2012中(我不认为太多,虽然事项)
这里是我的架构(没什么特别的):
CREATE TABLE [dbo].[Category] (
[CategoryId] INT IDENTITY (1, 1) NOT NULL,
[PrimaryProductId] INT NULL,
[CategoryNode] [sys].[hierarchyid] NOT NULL,
[CategoryString] AS ([CategoryNode].[ToString]()) PERSISTED,
[CategoryLevel] AS ([CategoryNode].[GetLevel]()) PERSISTED,
[Title] NVARCHAR (50) NOT NULL,
[IsActive] BIT DEFAULT ((1)) NOT NULL,
CONSTRAINT [Category_CategoryId_PK] PRIMARY KEY CLUSTERED ([CategoryId] ASC),
CONSTRAINT [Category_Product_PrimaryProductId] FOREIGN KEY (PrimaryProductId) REFERENCES [dbo].[Product](ProductId),
UNIQUE NONCLUSTERED ([CategoryNode] ASC)
);
下面是一个单列的父母一个例子:
DECLARE @person hierarchyid
SELECT @person = Id
FROM dbo.HierachyTable
WHERE [Name] = 'Joe Blow';
SELECT
Id, Id.ToString() AS [Path],
Id.GetLevel() AS [Level],
Id.GetAncestor(1),
Name
FROM
dbo.HierarchyTable
WHERE
@person.IsDescendantOf(Id) = 1
请显示您的表架构,示例数据。 – DarkKnight