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.

Итак, например, я ищу запрос, который позволяет мне ВЫБИРАТЬ сообщения, "принадлежащие" к tids 1456,7622,862 и относительному tid описанию.

Вот скриншот таблицы field_data_body : enter image description here

Author: MultiformeIngegno, 2015-07-04

2 answers

Я думаю, нам было бы лучше разделить задачу на 2 подзадачи:

  1. Найдите тела сообщений, принадлежащих определенному tid.
  2. Найдите все комментарии тела, относящиеся к определенному tid.

Нам нужно будет использовать эти таблицы:

  1. поля_дата_таксономии_форумы
  2. поле_дата_боди
  3. комментарий
  4. поле_дата_комментария_боди

Структура базы данных:

Database structure

Нахождение тела

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 запроса, вы получите список сообщений и комментариев.

Sqlfiddle

 5
Author: user4035, 2015-07-07 00:40:46

Чтобы найти ссылку на идентификатор форума, вы должны добавить использование таблицы "форум" (таблица, устанавливающая связь узлов с условиями форума.) Также следует отметить, что идентификатор форума не существует, это идентификатор таксономии. Вот пример получения только первой темы сообщения по идентификатору таксономии(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". таблица.

Надеюсь, это поможет

 2
Author: Rouk, 2015-07-06 22:52:47