gpt4 book ai didi

sql - 此问题的SQL查询将是什么?

转载 作者:行者123 更新时间:2023-12-04 14:43:31 26 4
gpt4 key购买 nike

我想从以下数据库表“文章”中获取一些数据。

我想获取商品信息,其category_id为4。但是结果应包含其父类别的所有记录。

例如 :
“article1”的父级为“Sub Category1”,其父级为“Main Category”。因此,结果应具有表中的行1,2,4。

是否可以为此编写一个SQL查询?根据上述条件可以获取数据的查询将是什么?

请指导我..!

谢谢..

最佳答案

请引用这篇文章:Managing Hierarchical Data in MySQL

实际上,他们的目的是在无需递归的情况下获取层次结构数据。
因为他们将lft(left)和rgt(right)用作额外的列来存储表的结构信息。 lft和rgt设置如下

根lft为1,则其第一个子lft为下一个数字,然后为其下一个数字的子代,依此类推,直到没有子代,对于该节点(叶节点),rgt将为其lft +1。
我们将 sibling lft设置为rgt +1,并且也遵循相同的规则。

如果所有 child 的编号都完成了,它将把 parent rgt设置为最后一个 child 的rgt +1。

我还没有做清楚的解释,但是在与图像的链接上,它更容易理解。

因此,在此之后,您可以使用以下查询轻松探索嵌套结构

为了按顺序获取所有 parent 的ID:

SELECT parent.category_id
FROM article AS node,
article AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.category_id = $category_id
ORDER BY parent.lft;

对于删除任何行:
LOCK TABLE article WRITE;
SELECT @myLeft := lft, @myRight := rgt, @myWidth := rgt - lft + 1
FROM article WHERE category_id = 'row_id';
DELETE FROM article WHERE lft BETWEEN @myLeft AND @myRight;
UPDATE article SET rgt = rgt - @myWidth WHERE rgt > @myRight;
UPDATE article SET lft = lft - @myWidth WHERE lft > @myRight;
UNLOCK TABLES;

要插入任何行:
LOCK TABLE article WRITE;
SELECT @myLeft := lft FROM article WHERE category_id = 'parent_id';
UPDATE article SET rgt = rgt + 2 WHERE rgt > @myLeft;
UPDATE article SET lft = lft + 2 WHERE lft > @myLeft;
INSERT INTO article(title, lft, rgt) VALUES('title', @myLeft + 1, @myLeft + 2);
UNLOCK TABLES;

这有点复杂,但是在创建存储过程之后,将不难使用。

关于sql - 此问题的SQL查询将是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6223092/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com