【问题标题】:Drupal: MySQL SELECT all posts belonging to a specific forumDrupal:MySQL 选择属于特定论坛的所有帖子
【发布时间】:2015-09-22 03:00:24
【问题描述】:

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

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

field_data_bodyfield_data_comment_body 的结构相同,body_value 列是帖子的内容,entity_id 列是它们的唯一 ID。

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

所以,我正在寻找一个查询,它允许我选择帖子的正文(包括第一个帖子和回复)以及指定 tids 数组的论坛描述(即论坛的 ID)类别),我将在 taxonomy_term_data 表中手动查找。

因此,例如,我正在寻找允许我选择帖子“属于”tids 1456,7622,862 和相关tid 描述的查询。

这是field_data_body 表的屏幕截图:

【问题讨论】:

    标签: mysql drupal phpmyadmin drupal-7


    【解决方案1】:

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

    1. 查找属于特定 tid 的帖子正文。
    2. 查找身体的所有 cmets,属于特定 tid。

    我们需要使用这些表格:

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

    寻找尸体的 cmets

    这里我们需要 cmets 表,它结合了 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 个查询联合起来,您将获得帖子和 cmets 的列表。

    sqlfiddle

    【讨论】:

    • 完美。 12 小时内获得赏金。 :-)
    【解决方案2】:

    要查找对论坛 ID 的引用,您必须添加“论坛”表的使用(建立节点与论坛术语关系的表。) 还应该注意的是,论坛 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”表中。

    希望对你有帮助

    【讨论】:

    • 就在您发帖时,我正在编辑问题以添加更多详细信息,因为我进行了一些调查
    • 并添加回复(加入 field_data_comment_body)?
    • 您不能直接加入“field_data_comment_body”,您必须先加入“comment”表才能获得正确的评论实体ID。
    • 嗯,但我在field_data_comment_body 表中看到了一个entity_id
    • “field_data_comment_body”表中的 entity_id 是评论实体而非节点实体的“id”...要查找与特定评论相关的节点,您需要表“comment”中的节点 id (nid)
    猜你喜欢
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多