2012-04-18 80 views
2

因此,我需要从一个表中选择不同的值,但从另一个表中连接所有相关值,但是在同一个查询中。mysql从一个表中选择来自另一个表的连续结果

基本上我继TOXI TagSystem架构http://forge.mysql.com/wiki/TagSchema#Toxi

三表许多一对多之间的映射。

而且我需要在每行上显示一个插入的值(文档),但其中的一列我希望文件已用逗号分隔的所有标签。

现在我有

SELECT 
    docs.id AS id, 
    docs.orig_file AS orig_file, 
    docs.date_sent AS date_sent, 
    tags.tag_name AS alltags 
FROM documat AS docs 
LEFT JOIN documat_file2tag AS f2t ON f2t.doc_id = docs.id 
LEFT JOIN documat_tags AS tags ON tags.id = f2t.tag_id 

但这是重复的行如果特定docs.id具有比标签多。最终的结果,我想对每行是:

| ID | orig_file | date_sent | alltags | 

随着期望的结果例如:

| X | example_value.pdf | 2012-03-23 10:14:05 | tag_ex_1, tag_ex_2, etc | 
+1

你可以使用子查询和GROUP_CONCAT?请参阅http://stackoverflow.com/questions/276927/can-i-concatenate-multiple-mysql-rows-into-one-field – ovolko 2012-04-18 08:37:48

+0

@ovolko,因为我有三张表,我需要仔细选择正确的。怎么样? Sql真的是我的弱点:P – eduardev 2012-04-18 08:40:40

+0

确定好像子选择甚至不需要:) – ovolko 2012-04-18 08:43:35

回答

6

组的毗连:

SELECT 
    docs.id AS id, 
    docs.orig_file AS orig_file, 
    docs.date_sent AS date_sent, 
    GROUP_CONCAT(distinct tags.tag_name) AS alltags 
FROM documat AS docs 
LEFT JOIN documat_file2tag AS f2t ON f2t.doc_id = docs.id 
LEFT JOIN documat_tags AS tags ON tags.id = f2t.tag_id 
GROUP BY docs.id 
+0

我确实需要;)编辑它,它被接受,谢谢:) – eduardev 2012-04-18 08:42:42

相关问题