“堆栈”或“添加”MySQL结果.什么的


"Stack" or "Add" MySQL results... or something

让我直接开始吧。我有一个MySQL表,其中有一行包含文本。例。。。 入口 |标签 帖子1 |标签, 标签 1, 标签 4 帖子2 |标签 1, 标签 2, 标签 4我想抓取所有标签并显示标签及其使用次数。例。。。 标签 (1) 标签1 (2) 标签4 (2) 标签2 (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)

你可以这样做,但最简单的方法是在 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)";
}

希望这有帮助

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

你应该有这样的东西:

入口表:

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

标签表:

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

EntryHasTag 表:

id_entry | id_tag
0          1
0          2
1          1
1          2

然后,您可以执行以下操作:

SELECT COUNT(e.id_tag) FROM EntryHasTag e LEFT JOIN Tags t ON e.d_tag = t.id GROUP BY e.id_tag