如何在PHP中将多个类别分配给单个帖子的方法?

如何在PHP中将多个类别分配给单个帖子的方法?,php,mysql,Php,Mysql,我目前在一个自定义的cms上工作,用户可以将多个类别分配到单个帖子中。我的问题是: 正确的mysql表模式是什么 如何在blog post表中存储多个选定类别 请让我知道,如果你有澄清 你这里有一个多对多的关系。存储关系的标准方法是对类别和帖子使用联接表。该表将只有类别ID和帖子ID post表将没有关于类别本身的信息 每个人(包括我自己)似乎都在使用@rwilliams所描述的解决方案。当查询仅限于一个标记时,这些方法可以很好地工作。要查询2个标记(标记为personal和标记为travel)

我目前在一个自定义的cms上工作,用户可以将多个类别分配到单个帖子中。我的问题是:

  • 正确的mysql表模式是什么
  • 如何在blog post表中存储多个选定类别
  • 请让我知道,如果你有澄清

  • 你这里有一个多对多的关系。存储关系的标准方法是对类别和帖子使用联接表。该表将只有类别ID和帖子ID

  • post表将没有关于类别本身的信息


  • 每个人(包括我自己)似乎都在使用@rwilliams所描述的解决方案。当查询仅限于一个标记时,这些方法可以很好地工作。要查询2个标记(标记为personal和标记为travel),需要使用联接。当查询变得更复杂时,这就开始崩溃。我认为MongoDB是一个更好的解决方案。

    对于多对多关系,您可以将表设计为

    caegory table
        categoryId categorydescription
    
    post table    
        postid     postText
    
    a third table to link them    
        categoryId  postId
    
    显示一个条目,其中博客帖子“我的标题”被标记为关于酸奶和摩托车

  • 正确的mysql表模式是什么

    一种方法是创建关系表:

    创建表格cms.Posts(
    发帖连载,
    后内容文本,
    主键(posted)
    )引擎=InnoDB;
    创建表cms.Categories(
    分类序列,
    类别名称VARCHAR(20),
    主键(类别ID)
    )引擎=InnoDB;
    创建表cms.PostCategories(
    PostID BIGINT UNSIGNED NOT NULL,
    CategoryID BIGINT无符号非空,
    主键(PostID、CategoryID),
    外键(PostID)引用cms.POST(PostID),
    外键(CategoryID)引用cms.Categories(CategoryID)
    )引擎=InnoDB;
    
  • 如何在blog post表中存储多个选定类别

    如果没有,则将它们存储在
    PostCategories
    表中:

    $dbh=newpdo('mysql:charset=utf8',$username,$password);
    $dbh->setAttribute(PDO::ATTR\u EMULATE\u PREPARES,false);
    $dbh->prepare('插入cms.Posts(PostContent)值(?))
    ->执行([$\u POST['content']]);
    $qry=$dbh->准备
    插入cms.PostCategories(PostID,CategoryID)值(?,)
    ');
    $qry->bindValue(1,$dbh->lastInsertId());
    $qry->bindParam(2$category);
    foreach($_POST['categories']作为$category)$qry->execute();
    

  • 你能解释一下最后的第二行和第三行吗?@eggyal:你能告诉我如何列出每个帖子的类别并选择/检查类别吗。我的意思是更新后的页面。
    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