2010-11-15 86 views
0

在MySQL中,我有一个文件表,文件夹表,和searchtags表如何使用单个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很多一对多加入表达的文件和文件夹之间的关系表,文件和searchtags。单个文档可以有多个文件夹和多个与之关联的搜索标签。

我想知道是否可以创建一个单个查询将选择所有文档的标题,以及属于每个文档的每个文件夹标题的定界列表以及定界列表每个文档的每个searchtag标题。

例如,结果集可能是这个样子:

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 

感谢(提前)对你的帮助

回答

2

用途:

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 
+0

感谢的快速反应。我尝试过实现你的解决方案,但遇到了一些问题...因为每个文档都有多个文件夹,推测f.title也应该包装在GROUP_CONCAT中,但是当我这样做时,我会在定界结果集中重复出现多个文件夹标题... 有任何想法吗? – Travis 2010-11-15 03:48:53

+0

,几乎可以工作。然而,现在界定的搜索标题正在重复... – Travis 2010-11-15 03:54:28

+0

@ Travis:对不起 - 请参阅更新。 – 2010-11-15 03:56:22