【问题标题】:Searching text/tags from one side of an associative table in MySQL, and returning data from the other从 MySQL 中关联表的一侧搜索文本/标签,并从另一侧返回数据
【发布时间】:2011-07-17 02:24:35
【问题描述】:

我有一个类似这样的表结构(这是一个巨大的简化):

Posts
    UID
    Title
    Text ID (linked to Text.UID)

Tags
    UID
    Tag Name
    Tag Description

Tag Associations
    UID
    Post UID (linked to Posts.UID)
    Tag UID (linked to Tags.UID)

Text
    UID
    Text

我想知道两件事:

A) 我如何进行查询以返回 Posts 表中的所有信息(包括 Text 表中的文本),对于与特定标签关联的所有“帖子”(通过纯文本搜索),没有重复,当一个帖子最多可以包含20个标签?

例如,一个标签可以是“PHP”,我想返回所有带有“PHP”标签的帖子。

B) 另外,我想包含与每个帖子相关的所有标签名称,但我不确定这是否可以在一个查询中完成。

我正在使用准备好的语句,并一次显示来自搜索的多个完整帖子及其所有标签,并且宁愿不必运行单独的查询来返回帖子及其所有标签。

【问题讨论】:

    标签: mysql sql mysqli


    【解决方案1】:
    SELECT
      Posts.Title AS Title,
      Text.Text AS Text,
      (
        SELECT Tags.*
        FROM Tags
        INNER JOIN TagAssociations ON Tags.UID = TagAssociations.TagUID
        WHERE TagAssociations.PostUID = Posts.UID
     ) AS Tags
    FROM Posts
    INNER JOIN Text ON Posts.UID = Text.UID
    INNER JOIN TagAssociations ON Posts.UID = TagAssociations.PostUID
    INNER JOIN Tags ON Tags.UID = TagAssociations.TagUID
    WHERE Tags.TagName = 'search'
    

    我不认为子查询会起作用,但你可以试一试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 2022-01-17
      • 2015-02-26
      相关资源
      最近更新 更多