【发布时间】:2012-09-28 00:53:51
【问题描述】:
我需要一个用于以下复杂任务的 SQL 查询...
我需要从名为parent_id 的列中进行选择。如果一行的 parent_id 为 0,则表示它是一个类别(它还有 type 列,表示类别为 cat),如果一行的 parent_id 为 1 或更多,则表示它是一个类别规则。规则的parent_id 是类别的rule_id。
包含一些数据的表结构:
我需要选择一种方式,即每个类别都有其子项。从图片中我们可以得到:
Sample Category 1
Sample rule 1
Sample Category 2
我尝试了一些从这里找到的查询,但没有一个有效。
这是我上次尝试的:
'SELECT *
FROM ' . RULES_TABLE . ' AS parent
LEFT JOIN ' . RULES_TABLE . ' AS child
ON child.parent_id = parent.rule_id
WHERE parent.parent_id = 0
AND parent.public = 1
ORDER BY parent.cat_position, child.rule_position';
它仅返回示例规则 1。
想法?
【问题讨论】:
-
如果您要问的是,您不能在 sql 中使用单个查询来执行此操作...请更具体一点,您可以通过查询类别和子查询来查询规则甚至在单个查询中,如果您可以在结果中没有规则的情况下牺牲类别并接收每个规则的类别名称,或者不牺牲带有连接(带有逗号或您选择的某些字符)规则名称的空类别
-
我可以通过将查询放入由另一个查询创建的循环中来解决此问题,但不建议这样做,我不应该这样做。这就是为什么我在这里询问一个不包括循环查询的可接受的解决方案。
-
如果您有不包含循环查询的解决方案,请发布。
-
@xception 你能告诉我一个例子,它与下面的内容相同,但带有子查询吗?
-
group_concat_max_size 不够?单个查询还有另一种方法,但需要在编程方面进行更多处理,或者我也可以使用子查询!