繁体   English   中英

sql查询树状结构

[英]sql query tree like structure

我有一个像树一样的类别结构,树中的叶节点有产品,产品有鳕鱼,我需要选择所有具有与某些仓鼠匹配的叶子(鳕鱼)的顶级类别(parent = null)。

SELECT  
    Category.Id AS Id0_, 
    Category.Name AS Name0_, 
    Category.COrder AS COrder0_, 
    Category.Description AS Descript4_0_, 
    Category.ParentId AS ParentId0_, 
    Category.Description_En AS Descript6_0_, 
    Category.Name_En AS Name_En0_, 
    Category.ImagePath AS ImagePath0_ 
FROM
    Category 
    LEFT JOIN Category AS c1 ON Category.Id=c1.ParentId
    LEFT JOIN Category AS c2 ON c1.Id=c2.ParentId
    LEFT JOIN Category AS c3 ON c2.Id=c3.ParentId
    LEFT JOIN Category AS c4 ON c3.Id=c4.ParentId
    LEFT JOIN Product ON 
        c4.Id=Product.Category 
        OR c3.Id=Product.Category 
        OR c2.Id=Product.Category 
        OR c1.Id=Product.Category 
        OR Category.Id=Product.Category
    INNER JOIN Cod ON Cod.Product=Product.Id   
WHERE
    Category.ParentId is null 
    AND Cod.Hidden!='1' 
    AND 
    (
        cod.Stock>0 
        OR (cod.CodBare='0' AND Product.ProdType=8)) 
        AND Cod.Price>0
    )
ORDER BY Category.COrder

我的查询看起来像这样,但这不是解决方案,因为它非常非常慢...有人可以给我一些建议吗?

这是一个普遍的挑战。 从关系数据库创建分层数据并不总是那么好。 如果此数据没有经常更新,一种选择是将其作为XML吐出并缓存给应用程序。

如果要将其保留在数据库中,这是一个常见的解决方案: 在MySQL中管理分层数据

有多种解决方案来表示数据库中的树。 我真的建议您看一下这个介绍, 数据库中的树 我通常使用具有多个级别和150万个叶子的数据库,而嵌套间隔模型确实很有启发性。

我不知道您是否坚持使用这种数据结构,但您应该真正看一下文章“ 在MySQL中管理分层数据以进行分层数据管理”。

我已经使用了此处描述的解决方案(在Oracle和MS SQL Server中),它的速度非常快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM