我有三个 MySQL 表,一张包含数据,一张包含标签,一张包含这两者之间的关联,这似乎是存储标签时的常见做法。这些表格如下所示:
links:
+----+------------+------------+
| id | url | added |
+----+------------+------------+
| 2 | google.com | 2012-12-14 |
| 3 | cnn.com | 2001-02-13 |
+----+------------+------------+
tags:
+----+--------+
| id | tag |
+----+--------+
| 1 | search |
| 2 | news |
+----+--------+
taglink:
+----+--------+-------+
| id | linkid | tagid |
+----+--------+-------+
| 1 | 2 | 1 |
| 2 | 3 | 1 |
| 3 | 3 | 2 |
+----+--------+-------+
我想要收到的是下表:
+----+------------+------------+--------+-------------+
| id | url | added | tagids | tags |
+----+------------+------------+--------+-------------+
| 2 | google.com | 2012-12-14 | 1 | search |
| 3 | cnn.com | 2001-02-13 | 1,2 | search,news |
+----+------------+------------+--------+-------------+
为此,我有以下查询:
select
links.*,
group_concat(taglink.id) as tagids,
group_concat(tags.tag) as tags
from links
join taglink on taglink.linkid=links.id
join tags on tags.id=taglink.tagid
但这给了我一个单独的行,其中包含使用的每个标签,如下所示:
+----+------------+------------+--------+-------------+
| id | url | addad | tagids | tags |
+----+------------+------------+--------+-------------+
| 2 | google.com | 2012-12-14 | 1,2 | search,news |
+----+------------+------------+--------+-------------+
一切似乎都是分组的,这不是我想要的。有谁知道解决办法吗?
最佳答案
您需要将 GROUP BY
与 group_concat
函数一起使用,如下所示,否则它们的行为将无法预测。试试这个。
select links.id, links.url, links.added,
group_concat(tags.id ORDER BY tags.id) as tagids,
group_concat(tags.tag ORDER BY tags.id) as tags
from links
join taglink on taglink.linkid=links.id
join tags on tags.id=taglink.tagid
group by links.id, links.url, links.added
order by links.id
请注意,我添加了一些 ORDER BY
项以使事物的顺序可预测。
关于mysql - 通过链接表从 MySQL 数据库获取与标签关联的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13888516/