0

让我开始吧。我有一个带有文本行的 MySQL 表。示例...条目 | 标签 post1 | 标签,标签1,标签4 post2 | tag1, tag2, tag4 我想抓取所有的标签并显示标签和它被使用的次数。示例... tags (1) tag1 (2) tag4 (2) tag2 (1) 我可以使用当前设置执行此操作吗?感谢您的时间。

我去建立了一个名为“标签”的新表。这就是它的样子……

ID | POSTID | TAG
1       1     tag1
2       1     tag2
3       2     tag5
4       3     tag2
5       3     tag2

现在,我怎样才能建立一个像这样的列表?

tag1 (1)
tag2 (3)
tag5 (1)
4

2 回答 2

1

你可以这样做,但在 PHP 中解析标签是最简单的,所以对于所有标签:

$tagcount = array();
$query = "SELECT tags from table";
$result = mysqli_query($query);
while ($row = mysqli_fetch_array($result)) {
    $tags = explode(',', $row['tags']);
    foreach ($tags as $tag) {
    $tag = trim($tag);
        if (array_key_exists($tag, $tagcount)) {
            $tagcount[$tag]++;
        } else {
            $tagcount[$tag] = 1;
        }
    }
}
foreach ($tagcount as $key=>$value) {
     echo "<p>$key used $value time(s)";
}

希望这可以帮助

编辑:正如其他人所说,从长远来看,使用单独的标签表会更有效/更容易。

于 2013-09-10T09:03:38.233 回答
1

You should have something like this:

Entry table:

id (auto-increment, primary) | EntryName
0                              Entry1
1                              Entry2

Tags table:

id (auto-increment, primary) | TagName
0                              Tag1
1                              Tag2

EntryHasTag table:

id_entry | id_tag
0          1
0          2
1          1
1          2

Then, you can do something like this:

SELECT COUNT(e.id_tag) FROM EntryHasTag e LEFT JOIN Tags t ON e.d_tag = t.id GROUP BY e.id_tag
于 2013-09-10T09:01:54.427 回答