我正在尝试为商品实施标签系统。标签包含在一个称为标签的表中,我还有另一个表标签项,可将项目链接到标签。一个项目可以有多个标签。当我显示项目时,我想列出所有标签。我的问题是,有什么办法可以通过一个查询做到这一点?如果将项目结果添加到标签表中,或者我获得一个项目的多个记录(对应于多个标签),或者如果我包含一个分组标记,那么我将获得一个记录,但只有第一个标签。

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

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


谢谢任何建议。

最佳答案

尝试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


试一试,让我知道会发生什么。我在表结构上有点猜测,因此可能需要进行一些调整。

关于mysql - php/mysql查询联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12923140/

10-13 08:15
查看更多