我有一个带有2个字段的mysql表'taxonomy_term_hierarchy'。
tid - 主键:术语的taxonomy_term_data.tid。
parent - 主键:术语父级的taxonomy_term_data.tid。 0表示没有父母。
我需要在一段时间内获得1级孩子的学期,但是如果它没有孩子,那么为孩子做父母。类似的东西:
SELECT down.tid FROM taxonomy_term_hierarchy down WHERE down.parent=60
IF ( COUNT(down.tid) = 0 ) THEN
SELECT current.tid FROM taxonomy_term_hierarchy current
WHERE current.parent=
(SELECT its.parent FROM taxonomy_term_hierarchy its
WHERE its.tid=60)
我可以在单一查询中完成吗?
答案 0 :(得分:0)
不幸的是,我不认为一个查询可以实现这一点,因为您需要IF
语句来确定要使用的查询。但是,您可以创建一个存储过程来为您处理逻辑,并通过将tid
传递给它来调用它。这是我创建的存储过程:
CREATE PROCEDURE getChildren(in _tid int)
BEGIN
DECLARE hasChildren BIT;
SET hasChildren = EXISTS (
SELECT ''
FROM taxonomy_term_hierarchy tth
WHERE tth.parent = _tid
);
IF hasChildren THEN
BEGIN
SELECT tid, parent
FROM taxonomy_term_hierarchy
WHERE parent = _tid;
END;
ELSE
BEGIN
SELECT tth3.tid, tth3.parent
FROM taxonomy_term_hierarchy tth1
INNER JOIN taxonomy_term_hierarchy tth2 ON tth1.parent = tth2.tid
INNER JOIN taxonomy_term_hierarchy tth3 ON tth2.tid = tth3.parent
WHERE tth1.tid = _tid;
END;
END IF;
END//
我在this sql fiddle上创建了架构,因此您可以自行测试。