让我直接开始吧。我有一个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