Php 左联接标记表

Php 左联接标记表,php,mysql,database-design,Php,Mysql,Database Design,我试图输出一个“项目”列表,其中包含一个“标签”列表。由于标记用于多个项目,因此我使用了一个名为“tag_rel”的桥接表 我想这会给我一个物品清单。但是如何输出每个项目的给定标记列表 我知道我不应该对每个查询都进行第二次查询,即: $query = mysql_query("SELECT i.* FROM items AS i ORDER by i.id DESC L"); while($row = mysql_fetch_ar

我试图输出一个“项目”列表,其中包含一个“标签”列表。由于标记用于多个项目,因此我使用了一个名为“tag_rel”的桥接表

我想这会给我一个物品清单。但是如何输出每个项目的给定标记列表

我知道我不应该对每个查询都进行第二次查询,即:

$query = mysql_query("SELECT i.*
                FROM items AS i
                ORDER by i.id DESC L"); 
while($row = mysql_fetch_array($query)){

    $query2 = mysql_query("SELECT t.name
                       FROM tag_rel AS tr
                       LEFT JOIN tags AS t ON (t.id = tr.tag)
                       WHERE tr.item=$row[id]"); 
    while($row2 = mysql_fetch_array($query)){
有什么建议吗

非常感谢

试试这个:

SELECT i.*, GROUP_CONCAT(t.name) tagList
FROM items AS i
LEFT JOIN tag_rel AS tr ON (tr.item = j.id)
LEFT JOIN tags AS t ON (t.id = tr.tag)
GROUP BY i.id 
ORDER BY i.id DESC
试试这个:

SELECT i.*, GROUP_CONCAT(t.name) tagList
FROM items AS i
LEFT JOIN tag_rel AS tr ON (tr.item = j.id)
LEFT JOIN tags AS t ON (t.id = tr.tag)
GROUP BY i.id 
ORDER BY i.id DESC


第一个查询将重复每个标记的所有项,对吗?因此,您可以在PHP上执行该逻辑。在一个变量中存储项信息,在另一个变量中存储标记信息。当项目更改时,打印项目及其标记,然后重新开始。是。。当项目相同时,做一件事,否则做另一件事。输出是一个缩略图列表,所有缩略图都相应地进行了标记。Ie.[图1]标记为:搞笑,哈哈,猫[图2]标记为:旅游,亚洲,背包[图3….我知道如何获取项目的行,但如何获取标记列表?第一次查询将重复每个标记的所有项目,对吗?因此,您可以在PHP上执行该逻辑。将项目信息存储在变量中,在另一个变量中,保存标记信息。当项目更改时,打印项目及其标记,然后重新开始。是的..它应该可以工作m是相同的做一件事,否则做另一件事输出是一个缩略图列表,所有缩略图都相应地被标记。例如,[图1]标记为:搞笑,大笑,猫[图2]标记为:旅游,亚洲,背包[图3….我知道如何获取项目的行,但如何获取标记列表?那么我如何输出标记列表?在
标记列表
列下,您将获得特定项目的所有标记OK,但我的表中实际上没有标记列表列。我们在同一页吗?它不在您的表中。它是我的输出列查询每个项目。检查我的查询并在您的数据库上运行,然后查看是否确实找到了解决方案?看起来很有希望:D它给了我一个标记列表,如下所示:“tag1,tag2,tag3”那么,我如何输出标记列表呢?在
tagList
列下,您将获得特定项的所有标记OK,但我的表中实际上没有标记列表列。我们在同一页上吗?它不是表中的列。它是我对每个项的查询的输出列。检查我的查询并在数据库上运行,如果您确实您的解决方案?看起来很有希望:D它给了我一个标签列表,如下所示:“tag1,tag2,tag3”