mysql从一个表中选择一个表,并从另一个表中获取concat结果

标签 mysql tags

所以我需要从一个表中选择不同的值,但在同一个查询中连接另一个表中的所有相关值。

基本上我遵循 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 |

最佳答案

组连接:

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

关于mysql从一个表中选择一个表,并从另一个表中获取concat结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10205712/

相关文章:

mysql - 根据第一个查询获取结果

php - 如何将yii中的输入保存到数据库

php - 无法弄清楚如何运行 mysqli_multi_query 并使用上次查询的结果

php - 使用mysql从多个表中选择

Maven - Mercurial/Svn - svn/hg 标记失败,退出代码为 255

javascript - Adobe DTM 中的过滤器链接跟踪问题

php - 如何使用多个表的数据格式化嵌套的json

jquery - 如何替换 HTML 标记的文本

ios - 使用 Apple Wallet NFC Pass 作为 NFC 标签

mysql - 处理表格的困境?