как выбрать уникальные ключевые слова из тегов, разделенных запятыми
Я хочу получить некоторые теги из моей базы данных, они находятся в форме:
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_*
функции.