Drupal:MySQL SELECT 所有属于特定论坛的帖子

Drupal: MySQL SELECT all posts belonging to a specific forum

我需要 select 在 Drupal 的一系列特定类别(论坛)中发布的所有消息(第一个帖子和回复)。

第一个帖子存储在 field_data_body,回复存储在 field_data_comment_body

field_data_bodyfield_data_comment_body的结构是一样的,在body_value列中有帖子的内容,在entity_id列中有他们的唯一ID。

table field_data_taxonomy_forums 包含 entity_id 列和 taxonomy_forums_tid 列(它们是论坛类别的 ID)。 table taxonomy_term_data 包含列 tid(与 taxonomy_forums_tiddescription 列(即论坛类别的标题)相同)。

所以,我正在寻找一个查询,它允许我 select 帖子的 body 和指定数组 body 的论坛描述 tids(即论坛类别的 ID),我将在 taxonomy_term_data table.

中手动找到

因此,例如,我正在寻找允许我 SELECT 帖子 "belonging" 到 tids 1456,7622,862 和相关 [=22] 的查询=] 描述。

这是 field_data_body table 的屏幕截图:

要查找对论坛 ID 的引用,您必须添加对 "forum" table 的使用(table 建立节点与论坛条款的关系。) 还应该注意的是,论坛 id 不存在,它是一个分类 id。 这是一个通过分类 id(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" table.

希望对您有所帮助

我认为,我们最好将任务分成 2 个子任务:

  1. 查找属于特定 tid 的帖子正文。
  2. 查找正文中属于特定 tid 的所有评论。

我们需要使用这些 tables:

  1. field_data_taxonomy_forums
  2. field_data_body
  3. 评论
  4. field_data_comment_body

数据库结构:

找到尸体

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);

查找正文的评论

这里我们需要注释 table,它统一了 field_data_bodyfield_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 个查询进行 UNION,您将获得帖子和评论的列表。

sqlfiddle