请参见下图:要获取 Mazda 父类别的 ID,我将使用以下内容:
SELECT `parent_id` FROM `product_categories` WHERE `category_id` = 8
if result is not equal to 0 repeat select statement
在满足条件之前循环 SQL 选择语句是否被认为是不好的做法?换句话说; 我应该重新设计产品类别表吗?
非常感谢您的建议。
是的,在这种情况下,可能需要添加另一个包含最顶层父级的字段。
这当然会引入冗余,因为信息已经在表中可用,但有时这是可以接受的性能折衷。
您将为最顶层的父级添加一个字段,如下所示:
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
这可用于获取单个项目的最顶层父项,或获取属于同一父项的所有项目,这对于原始布局会更加复杂。
好吧,使用这种查询可能会使处理结果变得复杂。我强烈和个人使用recursive functions
而不是查询循环。
更多信息:什么是 PHP 中的递归函数?
试试这个(在 PosgreSQL 中有内置函数可以做同样的事情(with recursive query
)