如何从逗号分隔的标签中选择唯一关键字

时间:2012-09-10 02:00:40

标签: php mysql arrays explode

我想从我的数据库中检索一些标签,它们的格式为:

topic_id       tags
   1        `tag1,tag2,tag3`
   2        `tag1,tag4,tag5`
   3        `tag2,tag4,tag5`
   4        `tag6,tag7,tag2`

我希望有这样的东西:

tag1 tag2 tag3 tag4 tag5 tag6 tag7

即所有唯一标签

这样我就可以在链接中包装每个标记,以便对具有此类特定标记的新闻文章进行分组。

到目前为止,我写的以下查询无效:

$tags = mysql_query("SELECT tags, topic_id
                       FROM forum_topics
                       WHERE topic_id > 0")  or die (mysql_error());
                    while($tag = mysql_fetch_assoc($tags)){   
                    $split_tags  = "$tag";
                    $pieces = explode(",", $split_tags);
                    echo $pieces ;

当我做print_r($pieces);

我得到了Array ( [0] => Array ) Array ( [0] => Array ) Array ( [0] => Array ) Array ( [0] => Array )

这不是我想要的。

现在我的表结构看起来像topic_id , topic_head, topic_body, topic_tag, topic_date, topic_owner ..我怎样才能进一步使topic_tag正常。

3 个答案:

答案 0 :(得分:3)

如果您规范化数据库设计,那么您可以通过

轻松获得所有不同的标签
SELECT DISTINCT tags FROM forum_topics WHERE topic_id > 0

但是现在,使用您的数据库结构,您无法执行此操作,您必须获取所有标记并在其上使用array_unique

$tags = array();
$rows = mysql_query("SELECT tags FROM forum_topics WHERE topic_id > 0")  or die (mysql_error());
while($row = mysql_fetch_assoc($rows)){   
  $tags = array_merge($tags, explode(',' $row['tags']));
}
$tags = array_unique($tags);
print_r($tags);

但即使您可以这样做,规范化您的数据库设计也是最佳选择。

答案 1 :(得分:2)

试试这个:

$tags = "";
while($row = mysql_fetch_assoc($tags)) {   
    $tags .= $row["tags"] . ",";
}

$tags = rtrim($tags, ",");
$pieces = explode(",", $tags);

print_r($pieces); // all of them

$pieces = array_unique($pieces);

print_r($pieces); // distinct

...以及Jonah Bishop already mentioned,请避免使用mysql_*个功能。

答案 2 :(得分:0)

select distinct tags from forum_topics;