MySQL:只需一个请求即可获取所有项目和相关标签

时间:2015-06-11 16:25:48

标签: mysql database join

我有两个MySQL表。一个包含Items(格式:id | name | ...),另一个包含属于这些项的标签(格式:id | item_id | name | ...)。每个人都有一行'使用'一个标签。一个项目可以有许多标签。

是否可以(例如通过智能使用JOIN)仅使用一个请求获取所有项目(包括其关联标签)?

我想要的是:

  • itemName1
    • tagName1
    • tagName2
  • itemName2
    • tagName1
  • itemName3
    • tagName2
    • tagName3
    • tagName4

1 个答案:

答案 0 :(得分:5)

这可以通过连接轻松完成,您只需使用item_id作为相关列:

SELECT i.id, i.name, t.name
FROM items i
JOIN tags t ON t.item_id = i.id;

如果要查看组合在一起的项目的所有标记,可以考虑使用GROUP_CONCAT()函数:

SELECT i.id, i.name, GROUP_CONCAT(t.name) AS tags
FROM items i
JOIN tags t ON t.item_id = i.id
GROUP BY i.id;

这将为您提供逗号分隔的每个项目的所有标记列表。请注意,上述查询仅返回具有标记的项目。如果您想查看所有项目,无论他们是否有与之关联的标记,您都应使用LEFT JOIN

相关问题