2

我有一个漫画网站,目前允许用户按类别选择他们查看的漫画:图表、办公室、生活、杂项等。

我想实现一个标记系统,类似于我们在 StackOverflow 上的系统,它将更多地描述每部漫画的内容而不是其类别。例如:在图表类别中,我有几个与业务相关的...

我的简单解决方案是按照我处理分类的方式处理它 -

  1. 使用 tagid、tagname、tagdescription 创建一个“Tags”表
  2. 在漫画表中添加一个 tagid_ForeignKey 字段,并为每个帖子添加一个标签。
  3. 当用户点击一个标签时,它只会显示那些带有该标签的帖子......或者如果还指定了一个类别,它将显示带有该特定标签的特定类别。

然而,这种方法似乎将我限制为每个类别一个标签。如果我有一个与业务和关系相关的漫画怎么办......所以它需要这两个标签。

我如何能够为每部漫画附加多个标签?


编辑:

还有几个问题:

1)我在我的新关系表中插入什么......什么?

2)另外,对于while ($row = $tag->fetch_assoc()) {,如果有一个连接,我如何循环遍历一个表?那不是关联数组吗?

3) 问题是我正在呼应标签选择,所以一旦用户点击一个链接,你怎么能允许他们点击另一个链接来分配第二个标签?

在此处输入图像描述

function getTags() {
include 'dbconnect.php';
global $site;

$tag = $mysqli->query("SELECT tagid, tagname FROM tags");   
//$tag = $mysqli->query("SELECT * FROM comics c INNER JOIN comictags ct ON (c.comicID = ct.comicID) WHERE ct.tag_id IN (1, 2, 3) GROUP BY c.comic_id");

mysqli_close($mysqli);

while ($row = $tag->fetch_assoc()) {        
    echo "<a href='?action=homepage&site=" . $site . "&tag=" . $row['tagid'] . "&tagname=" . $row['tagname'] . "'/>" . $row['tagname'] . "</a><br />";
  }

}
4

2 回答 2

6

只需添加另一个表。然后你有三个:一个用于标签,一个用于漫画,一个用于关系。您必须拥有此间接表才能正确存储多对多关系。这允许每个漫画有零个或多个标签(反之亦然)。

于 2013-02-13T14:44:41.467 回答
2

您可以通过多对多关系来完成此操作。多对多关系使用如下所示的关系连接表:

+---------------+---------------+
|   comic_id    |     tag_id    |
+---------------+---------------+
|       1       |        2      |
+---------------+---------------+
|       1       |        3      |
+---------------+---------------+
|       1       |        4      |
+---------------+---------------+

现在,在您的查询中:

SELECT * FROM comics c INNER JOIN comic_tags ct ON (c.comic_id = ct.comic_id) WHERE ct.tag_id IN (1, 2, 3) GROUP BY c.comic_id

其中 1、2、3 是用户选择他们希望看到的标签。

于 2013-02-13T14:46:02.243 回答