“堆叠”或“添加”MySQL结果......或其他东西

时间:2013-09-10 08:43:50

标签: php mysql

让我做对了。 我有一个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)

2 个答案:

答案 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)";
}

希望这有帮助

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