НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
39 of 182 menu

Таблица taxonomy_term_hierarchy

Таблица taxonomy_term_hierarchy является ключевой для организации иерархических связей между терминами словарей таксономии в Drupal. Она позволяет создавать многоуровневые структуры терминов, где каждый термин может иметь родительский термин (или несколько родителей), формируя тем самым деревья.

Поля

Поле Тип данных Описание
tid int Идентификатор термина (taxonomy_term_data.tid). Первичный ключ, который также является внешним ключом, связывающим эту таблицу с основной таблицей терминов.
parent int Идентификатор родительского термина (taxonomy_term_data.tid). Значение 0 означает, что у термина нет родителя (он находится на верхнем уровне иерархии). Если термин имеет несколько родителей, для него будет создано несколько записей в этой таблице.

Как это работает

Каждая запись в таблице представляет собой связь ⁅i⁆ребенок-родитель⁅/i⁆. Поле tid содержит идентификатор дочернего термина, а поле parent - идентификатор его родителя. Если для одного и того же tid существует несколько записей с разными значениями parent, это означает, что термин имеет нескольких родителей (полииерархия).

Термины, у которых значение parent равно 0, считаются корневыми элементами своих иерархий. Модуль Таксономия использует эти данные для построения деревьев терминов, которые отображаются в виде вложенных списков при выборе терминов для материала, в административном интерфейсе для управления терминами, а также при отображении таксономии на сайте.

Важно отметить, что сама таблица не хранит информацию о том, к какому словарю (vocabulary) принадлежит термин. Эта информация хранится в таблице taxonomy_term_data в поле vid. Иерархия строится в рамках одного словаря, кросс-словарные родительско-дочерние связи невозможны.

При удалении термина все связанные с ним записи в этой таблице (как где он является родителем, так и где он является ребенком) удаляются автоматически для поддержания целостности данных.

Пример SQL-запроса

Получить всех непосредственных потомков (детей) для термина с ID 5 можно следующим запросом:

SELECT th.tid, td.name FROM taxonomy_term_hierarchy th INNER JOIN taxonomy_term_data td ON th.tid = td.tid WHERE th.parent = 5 ORDER BY td.weight, td.name;

Получить полный путь (цепочку родителей) для термина с ID 12 можно с использованием рекурсивного запроса (если СУБД поддерживает эту функцию, например, PostgreSQL с WITH RECURSIVE):

WITH RECURSIVE term_tree AS ( SELECT tid, parent, CAST(name AS TEXT) AS path FROM taxonomy_term_data td INNER JOIN taxonomy_term_hierarchy th ON td.tid = th.tid WHERE th.tid = 12 UNION ALL SELECT td.tid, th.parent, CAST(td.name || ' › ' || tt.path AS TEXT) FROM taxonomy_term_data td INNER JOIN taxonomy_term_hierarchy th ON td.tid = th.tid INNER JOIN term_tree tt ON th.tid = tt.parent ) SELECT path FROM term_tree WHERE parent = 0;

Смотрите также

  • таблицу taxonomy_term_data,
    которая хранит основные данные терминов таксономии
  • таблицу taxonomy_index,
    которая индексирует связи терминов с материалами
  • таблицу taxonomy_vocabulary,
    которая хранит информацию о словарях таксономии
  • таблицу node,
    которая хранит основные данные материалов (нод)
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить