0

我正在尝试为项目实施标签系统。标签包含在一个名为 tags 的表中,我有另一个表 tagitem 将项目链接到标签。一个项目可以有多个标签。当我显示该项目时,我想列出所有标签。我的问题是,有没有办法用一个查询来做到这一点?如果我将项目结果加入标签表,我会为一个项目获得多条记录(对应于多个标签),或者如果我按标签包含一个分组,我会得到一条记录但只有第一个标签。

另一种方法是进行第二次查询以获取标签,但这似乎效率低下。

Item table
Id | name

Tag table
Id | tag

Tagitem table
Id|itemid|tagid

Php

$sql = "select i.*,ti.*,t.*
FROM 'items' i
LEFT JOIN 'tagitem' ti
ON i.id=ti.itemid
LEFT JOIN  'tag' t
On ti.tagid=t.id
WHERE i.id='2'";

//returns multiple records

$sql.="group by i.id";

//returns only first tag

感谢您的任何建议。

4

1 回答 1

1

尝试GROUP_CONCAT

您应该能够选择您的标签作为子查询并将它们组合在一起以形成一个数组。

SELECT
    Item.name,
    GROUP_CONCAT (Tags.tag SEPERATOR ',') AS tags
FROM
    Item
    LEFT JOIN Tagitem ON Tagitem.itemid = Item.Id
    LEFT JOIN Tag ON Tagitem.tagus = Tag.Id
WHERE
    Item.Id = 2

试一试,让我知道会发生什么。我猜测表结构有点,所以它可能需要一些调整。

于 2012-10-16T20:51:04.580 回答