我目前正在开发自定义cms,用户可以将多个类别分配到单个帖子中。我的问题是:
如果您有澄清,请告诉我。
答案 0 :(得分:3)
你在这里有多对多的关系。存储关系的标准方法是使用类别和帖子的连接表。该表只有类别ID和post id。
邮政表中没有关于类别本身的信息。
答案 1 :(得分:1)
这是什么样的mysql表架构?
一种方法是创建关系表:
CREATE TABLE cms.Posts (
PostID SERIAL,
PostContent TEXT,
PRIMARY KEY (PostID)
) Engine=InnoDB;
CREATE TABLE cms.Categories (
CategoryID SERIAL,
CategoryName VARCHAR(20),
PRIMARY KEY (CategoryID)
) Engine=InnoDB;
CREATE TABLE cms.PostCategories (
PostID BIGINT UNSIGNED NOT NULL,
CategoryID BIGINT UNSIGNED NOT NULL,
PRIMARY KEY (PostID, CategoryID),
FOREIGN KEY (PostID) REFERENCES cms.Posts (PostID),
FOREIGN KEY (CategoryID) REFERENCES cms.Categories (CategoryID)
) Engine=InnoDB;
如何在博客帖子表中存储多个选定的类别?
您没有,将它们存储在PostCategories
表中:
$dbh = new PDO('mysql:charset=utf8', $username, $password);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->prepare('INSERT INTO cms.Posts (PostContent) VALUES (?)')
->execute([$_POST['content']]);
$qry = $dbh->prepare('
INSERT INTO cms.PostCategories (PostID, CategoryID) VALUES (?, ?)
');
$qry->bindValue(1, $dbh->lastInsertId());
$qry->bindParam(2, $category);
foreach ($_POST['categories'] as $category) $qry->execute();
答案 2 :(得分:0)
每个人(包括我自己)似乎都在使用的解决方案是@rwilliams所描述的。当查询仅限于单个标记时,这些工作正常。要查询2个标签(标记为个人标签并标记为旅行),您需要使用连接。当查询变得更复杂时,这开始崩溃。我认为MongoDB是一个更好的解决方案。
答案 3 :(得分:0)
对于多对多关系,您可以将表设计为
caegory table
categoryId categorydescription
post table
postid postText
a third table to link them
categoryId postId
答案 4 :(得分:0)
blog_posts
==========
id | 23
title | My title
categories
==========
id | 1
name | yogurt
// another row
id | 2
name | motor cycles
category_blog_post
==================
23 | 2
23 | 1
显示博客文章我的标题被标记为关于酸奶和摩托车的条目