【问题标题】:How do I concatenate the results from multiple join tables into a delimmited list using a single mySql query?如何使用单个 mySql 查询将多个连接表的结果连接到分隔列表中?
【发布时间】:2010-11-15 03:10:22
【问题描述】:

在 MySql 中,我有一个文档表、一个文件夹表和一个搜索标签表

Documents
  ID
  title

Folders
  ID
  title

Searchtags
  ID
  title

docFolders
  docID -> Documents.ID
  folderID -> Folders.ID

docSearchtags
  docID -> Documents.ID
  searchtagID -> Searchtags.ID

在上面,docFolders 和 docSearchtags 是多对多的连接表,表示文档和文件夹、文档和搜索标签之间的关系。一个文档可以有多个文件夹和多个与之关联的搜索标签。

我想知道是否可以创建一个 single 查询来选择所有文档的标题,以及属于每个文档的每个文件夹标题的分隔列表,以及属于每个文档的每个搜索标签标题的分隔列表。

例如,结果集可能如下所示:

RESULT
docTitle                  | folderTitles           | searchtagTitles 
The Quick Brown Fox       | foxes, colours         | Bushy tails, browny, foxy
The Slow Green Turtle     | turtles, colours       | Hard shells, slimy, turtle-soup
The Cute Fluffy Bunny     | bunnies, cute          | Fluffy, rabbit, rabbit-stew

感谢(提前)您的帮助

【问题讨论】:

    标签: mysql select join concatenation


    【解决方案1】:

    用途:

      SELECT d.title AS doctitle,
             GROUP_CONCAT(DISTINCT f.title) AS foldertitles,
             GROUP_CONCAT(st.title) AS searchtagtitles
        FROM DOCUMENTS d
        JOIN DOCFOLDER df ON df.docid = d.id
        JOIN FOLDERS f ON f.id = dc.folderid
        JOIN DOCSEARCHTAGS dsc ON dsc.docid = d.id
        JOIN SEARCHTAGS st ON st.id = dsc.searchtagid
    GROUP BY d.title
    

    【讨论】:

    • 感谢您的快速响应。我已经尝试实现您的解决方案,但遇到了一些问题......因为每个文档有多个文件夹,大概 f.title 也应该包含在 GROUP_CONCAT 中,但是当我这样做时,我会在分隔的结果集中重复许多文件夹标题...有什么想法吗?
    • 这几乎可以工作。然而,现在正在重复划定的搜索标签标题......
    猜你喜欢
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多