как выбрать уникальные ключевые слова из тегов, разделенных запятыми

Я хочу получить некоторые теги из моей базы данных, они находятся в форме:

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 ответов


Если вы нормализуете дизайн базы данных, то вы можете получить все отдельные теги очень легко

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);

но даже вы могли бы сделать это, нормализовать дизайн базы данных-лучший выбор.


попробуйте это:

$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

...и как Иона Бишоп уже упоминал, пожалуйста, не mysql_* функции.


select distinct tags from forum_topics;