让我做对了。 我有一个MySQL表,其中一行有文本。例... 进入|标签 post1 |标签,tag1,tag4 post2 | tag1,tag2,tag4 我想获取所有标签并显示标签及其使用次数。例... 标签(1) tag1(2) tag4(2) tag2(1) 我能用我目前的设置做到这一点吗?谢谢你的时间。
我去了一个名为“tags”的新表。这就是它的样子......
ID | POSTID | TAG
1 1 tag1
2 1 tag2
3 2 tag5
4 3 tag2
5 3 tag2
现在,我该如何构建一个像这样的列表呢?
tag1 (1)
tag2 (3)
tag5 (1)
答案 0 :(得分:1)
你应该有这样的东西:
参赛表:
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
答案 1 :(得分: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)";
}
希望这有帮助
编辑:正如其他人所说,从长远来看,使用单独的标签表会更有效/更容易。