重复SQL select语句,直到满足条件

时间:2013-03-31 08:56:43

标签: mysql sql

请参阅下图:要获取马自达父类别的ID,我将使用以下内容:

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

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

非常感谢你的建议。

product categories table screendump

3 个答案:

答案 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而不是查询循环。

更多信息:What is a RECURSIVE Function in PHP?

答案 2 :(得分:0)

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

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