我有一个漫画网站,目前允许用户选择他们按类别查看的漫画:图表,办公室,生活,杂项等。
我想实现一个标记系统,类似于我们在StackOverflow上的内容,它将描述每个漫画的更多内容而不是其类别。例如:在图表类别中,我有几个与业务相关的...
我的简单解决方案就是如何处理我的分类 -
然而,这种方法似乎限制我每个类别一个标签。如果我有一个与商业和人际关系相关的漫画怎么办...所以它需要这两个标签。
我如何能够为每个漫画添加多个标签?
编辑:
还有一些问题:
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 />";
}
}
答案 0 :(得分:6)
只需添加另一张表。然后你有三个:一个用于标签,一个用于漫画,一个用于关系。您必须使用此间接表来正确存储多对多关系。这允许每个漫画都有零个或多个标签(反之亦然)。
答案 1 :(得分:1)
您可以通过多对多关系来实现这一目标。多对多关系使用如下所示的关系连接表:
+---------------+---------------+
| 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是用户选择他们想要看到的标签。