Drupal: MySQL ВЫБИРАЕТ все сообщения, принадлежащие определенному форуму
Мне нужно выбрать все сообщения (первые сообщения и ответы), опубликованные в массиве определенных категорий (форумов) в Drupal.
Первые сообщения хранятся в field_data_body
, ответы хранятся в field_data_comment_body
.
Структура field_data_body
и field_data_comment_body
одинакова, в столбце body_value
указано содержание сообщений, а в столбце entity_id
их уникальный идентификатор.
Таблица field_data_taxonomy_forums
содержит столбец entity_id
и столбец taxonomy_forums_tid
(которые являются идентификаторами категорий форума). Стол taxonomy_term_data
содержит столбцы tid
(что совпадает с taxonomy_forums_tid
и столбцом description
(который является названием категории форума).
Итак, я ищу запрос, который позволит мне выбрать текст сообщений (как первых сообщений, так и ответов) и описание форума с указанием массива tid
(т.Е. идентификаторов категорий форума), которые я вручную найду в таблице taxonomy_term_data
.
Итак, например, я ищу запрос, который позволяет мне ВЫБИРАТЬ сообщения, "принадлежащие" к tid
s 1456,7622,862
и относительному tid
описанию.
Вот скриншот таблицы field_data_body
:
2 answers
Я думаю, нам было бы лучше разделить задачу на 2 подзадачи:
- Найдите тела сообщений, принадлежащих определенному tid.
- Найдите все комментарии тела, относящиеся к определенному tid.
Нам нужно будет использовать эти таблицы:
- поля_дата_таксономии_форумы
- поле_дата_боди
- комментарий
- поле_дата_комментария_боди
Структура базы данных:
Нахождение тела
SELECT
taxonomy_forums.taxonomy_forums_tid AS tid,
body.entity_id,
body.body_value AS body
FROM
field_data_taxonomy_forums AS taxonomy_forums
INNER JOIN
field_data_body AS body
ON
body.entity_id=taxonomy_forums.entity_id
WHERE
taxonomy_forums.taxonomy_forums_tid IN (9);
Поиск комментариев для тел
Здесь нам понадобится таблица комментариев, которая объединяет field_data_body
и field_data_comment_body
.
SELECT
taxonomy_forums.taxonomy_forums_tid AS tid,
comment_body.entity_id,
comment_body.comment_body_value AS body
FROM
field_data_taxonomy_forums AS taxonomy_forums
INNER JOIN
field_data_body AS body
ON
body.entity_id=taxonomy_forums.entity_id
INNER JOIN
comment
ON
comment.nid=body.entity_id
INNER JOIN
field_data_comment_body AS comment_body
ON
comment_body.entity_id=comment.cid
WHERE
taxonomy_forums.taxonomy_forums_tid IN (9);
Если вы ОБЪЕДИНИТЕ эти 2 запроса, вы получите список сообщений и комментариев.
Чтобы найти ссылку на идентификатор форума, вы должны добавить использование таблицы "форум" (таблица, устанавливающая связь узлов с условиями форума.) Также следует отметить, что идентификатор форума не существует, это идентификатор таксономии. Вот пример получения только первой темы сообщения по идентификатору таксономии(tid)
SELECT * FROM field_data_body fdb
LEFT JOIN forum f ON f.nid = fdb.entity_id
WHERE fdb.bundle="forum" AND f.tid=15
Обратите внимание, что модуль форума работает с модулем ядра комментариев, что означает, что только первое сообщение темы хранится в "field_data_body", а все ответы хранятся в "field_data_comment_body". таблица.
Надеюсь, это поможет