В чем разница между term_id и term_taxonomy_id

2 янв. 2012 г., 17:15:54
Просмотры: 31.2K
Голосов: 39

Заголовок говорит сам за себя. В настоящее время в моих пользовательских таксономиях я получаю термины, используя идентификатор термина (term id) и имя таксономии.

Думал, что этот вопрос уже должен был быть задан ранее, но нигде не могу найти ответ! Поэтому решил спросить и посмотреть, есть ли у кого-нибудь ответы.

0
Все ответы на вопрос 5
4
35

Если вы посмотрите документацию WordPress, то найдете информацию о таксономиях WordPress

  • term_id — это ID термина в таблице terms
  • term_taxonomy_id — это уникальный ID для связки термин + таксономия.
2 янв. 2012 г. 17:35:34
Комментарии

так манипулирование и выборка терминов только по term_id не приведёт к дубликатам?

Daithí Daithí
2 янв. 2012 г. 20:51:29

фактически только что ответил на последний вопрос. Посмотрел таблицу wp_terms и да, использование только term_id безопасно. Спасибо за ответ, @Juan

Daithí Daithí
2 янв. 2012 г. 20:55:57

Просто заметка: в WordPress 4.2 все термины были разделены, что означает, что каждый term_id теперь встречается только один раз в таблице term_taxonomy (раньше этот столбец не был уникальным, и термины могли использоваться в нескольких таксономиях). Это может продолжать развиваться в будущем, согласно дорожной карте таксономий. Одна из частей этого плана — объединение таблиц term и term taxonomy.

J.D. J.D.
19 апр. 2016 г. 22:04:32

@J.D. так обидно, что спустя 8 лет эти таблицы до сих пор не объединены

Steve Moretz Steve Moretz
23 нояб. 2022 г. 11:27:59
0
19

Кодекс говорит:

  • term_id — это ID термина в таблице terms
  • term_taxonomy_id — уникальный ID для пары термин+таксономия

Что это означает?

Термин (term) — это слово. Оно может принадлежать к таксономии, такой как метки, категории или пользовательская таксономия. Суть в том, что может быть несколько таксономий, содержащих один и тот же термин.

Допустим, у вас есть термин "жирный". Это слово имеет идентификационный номер. Это term_id. Он не зависит от того, как это слово используется, то есть в каких таксономиях встречается термин.

Теперь слово "жирный" как метка записи также имеет номер. Это term_taxonomy_id. Он соответствует "метке записи 'жирный'".

Возможно, у вас также есть категория с названием "жирный". Хотя term_id остаётся тем же, term_taxonomy_id для "категории 'жирный'" будет другим.

24 июн. 2016 г. 06:51:25
1
11

Поскольку это часть более глубокого понимания структуры, я опишу её целиком... :)

В WordPress 4.5.3 по-прежнему присутствуют все эти таблицы (я буду говорить о них без префиксов):

  • posts
  • term_relationships
  • term_taxonomy
  • terms

Путь для получения читаемых названий терминов поста проходит через все эти таблицы.

posts
Главный идентификатор здесь — ID — идентификатор поста (любого типа).

term_relationships
Хранит пары:
object_idможет быть posts.ID (но не обязан им быть)
term_taxonomy_id — это НЕ идентификатор термина (категории), а идентификатор СВЯЗИ между термином (категорией) и таксономией ("типом категории").

term_taxonomy
Главный идентификатор здесь — term_taxonomy_id, описанный выше ^^
Другие важные столбцы:
term_idидентификатор термина (категории)
taxonomy — хранит таксономию термина ("тип категории")

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

terms
Главный идентификатор здесь — term_id — идентификатор категории.
Другие важные столбцы:
name — читаемое название категории, например, "Музыкальные жанры"
slug — ЧПУ-ссылка термина, которую можно использовать, например, в URL.

Таким образом, прямолинейный демонстрационный SQL-запрос для
получения всех опубликованных постов и всех их категорий с читаемыми названиями
может выглядеть так (добавьте префиксы к таблицам при тестировании в своей базе данных WordPress):

SELECT * FROM
posts #получаем посты
LEFT JOIN
term_relationships #получаем связи постов с term_taxonomy
ON(posts.ID=term_relationships.object_id)
LEFT JOIN
term_taxonomy #получаем term_id
ON(term_relationships.term_taxonomy_id=term_taxonomy.term_taxonomy_id)
LEFT JOIN
terms #наконец, получаем названия терминов
ON(term_taxonomy.term_id=terms.term_id)
WHERE (
    (posts.post_status='publish') 
    #дополнительно можно отфильтровать по определенному типу поста:
    #AND
    #(posts.post_type='some_post_type')
)
ORDER BY posts.ID ASC
23 июн. 2016 г. 22:53:59
Комментарии

Самое понятное объяснение в этой ветке... Спасибо!

Andrew Odri Andrew Odri
15 сент. 2021 г. 22:09:39
0

Термин сам по себе не является категорией или меткой. Он должен получить контекст через таблицу term_taxonomy.

Таблица term_taxonomy определяет термин в рамках таксономии. Именно это делает термин категорией, меткой или частью произвольной таксономии (или комбинации таксономий).

term_id - это ID термина в таблице terms.

term_taxonomy_id - это уникальный ID для пары термин+таксономия.

term_id всегда уникален, как и term_taxonomy_id. Оба имеют Auto Increment в структуре таблицы.

Таблица wp_term_taxonomy обеспечивает, например, создание категории, чтобы WordPress мог работать с ней. Например, WooCommerce использует: product_tag, product_type, product_cat, все они являются так называемыми произвольными таксономиями. Эта таблица также связывает структуру родитель/потомок через свой столбец parent.

Последняя таблица, term_relationships, связывает объекты, такие как записи или ссылки, с term_taxonomy_id из таблицы term_taxonomy.

Если снова взять WooCommerce в качестве примера, эта таблица связывает тип записи products с их таксономией product_cat, которая содержит имя, например Computers, которое, конечно, извлекается из таблицы wp_terms. Эта таблица содержит term_id, name, slug и term_group. (term_group я лично никогда не использовал)

Надеюсь, вышеизложенное немного проясняет различия и то, как WordPress использует эти таблицы.

17 нояб. 2015 г. 15:55:40
0

Статья "Понимание и работа с таксономиями и терминами в WordPress" объясняет причину использования двух отдельных таблиц - wp_term и wp_term_taxonomy:

Во многих установках WordPress будет одна запись в таблице wp_term_taxonomy для каждого термина в таблице wp_terms, но в некоторых случаях у вас может быть более одной записи для каждого термина. Это происходит, когда вы создаете два термина с одинаковым именем и ярлыком (slug) в разных таксономиях, что позволяет создавать запросы для вывода записей с этим термином в нескольких таксономиях.

Это означает, что связь между этими двумя таблицами является отношением "один ко многим": одна запись в таблице wp_terms может быть связана с несколькими записями в таблице wp_term_taxonomy, но каждая запись в wp_term_taxonomy связана только с одной записью в wp_terms.

1 февр. 2020 г. 10:41:59