3

请参见下图:要获取 Mazda 父类别的 ID,我将使用以下内容:

SELECT `parent_id` FROM `product_categories` WHERE `category_id` = 8
if result is not equal to 0 repeat select statement

在满足条件之前循环 SQL 选择语句是否被认为是不好的做法?换句话说; 我应该重新设计产品类别表吗?

非常感谢您的建议。

产品类别表screendump

4

3 回答 3

2

是的,在这种情况下,可能需要添加另一个包含最顶层父级的字段。

这当然会引入冗余,因为信息已经在表中可用,但有时这是可以接受的性能折衷。

您将为最顶层的父级添加一个字段,如下所示:

category_id  category_name  parent_id  top_id
------------ -------------- ---------- -------
1            CARS_          0          1
4            smartphones    0          4
5            Japanese-      1          1
7            Lexus          5          1
8            Mazda          5          1
9            Korean         1          1
10           Toyota         5          1

这可用于获取单个项目的最顶层父项,或获取属于同一父项的所有项目,这对于原始布局会更加复杂。

于 2013-03-31T09:05:34.587 回答
1

好吧,使用这种查询可能会使处理结果变得复杂。我强烈和个人使用recursive functions而不是查询循环。

更多信息:什么是 PHP 中的递归函数?

于 2013-03-31T09:01:10.723 回答
0

试试这个(在 PosgreSQL 中有内置函数可以做同样的事情(with recursive query

https://dba.stackexchange.com/questions/7147/find-highest-level-of-a-hierarchical-field-with-vs-without-ctes/7161#7161

于 2013-03-31T11:45:43.173 回答