请参阅下图:要获取马自达父类别的ID,我将使用以下内容:
SELECT `parent_id` FROM `product_categories` WHERE `category_id` = 8
if result is not equal to 0 repeat select statement
在满足条件之前循环SQL select语句被认为是不好的做法吗?换一种说法;我应该重新设计产品类别表吗?
非常感谢你的建议。
答案 0 :(得分: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
这可以用于获取单个项目的最顶层父项,或者用于获取属于同一父项的所有项目,这对于原始布局来说会更复杂。
答案 1 :(得分:1)
好吧,使用这种查询可能会使处理结果变得复杂。
我强烈地和个人使用recursive functions
而不是查询循环。
答案 2 :(得分:0)
试试这个(在PostgreSQL(with recursive query
)中有内置函数可以做同样的事情