6

データベースからいくつかのタグを取得したいのですが、それらの形式は次のとおりです。

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を正常にできますか。

4

3 に答える 3

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

しかし、これを行うことができたとしても、データベース設計を正規化することが最良の選択です。

于 2012-09-10T02:12:43.510 に答える
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 が既に述べたように、関数は避けてくださいmysql_*

于 2012-09-10T02:07:10.327 に答える
0
select distinct tags from forum_topics;
于 2012-09-10T02:08:24.237 に答える