用于选择子级和父级的SQL查询

时间:2014-03-02 23:23:09

标签: mysql drupal-7

我有一个带有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)

我可以在单一查询中完成吗?

1 个答案:

答案 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上创建了架构,因此您可以自行测试。