3

私は現在、ユーザーが複数のカテゴリを1つの投稿に割り当てることができるカスタムcmsに取り組んでいます。私の質問は次のとおりです。

  1. このための正しいmysqlテーブルスキーマは何ですか?
  2. 選択した複数のカテゴリをブログ投稿テーブルにどのように保存しますか?

ご不明な点がございましたら、お気軽にお問い合わせください。

4

5 に答える 5

4
  1. ここにあるのは多対多の関係です。関係を格納する標準的な方法は、カテゴリと投稿に結合テーブルを使用することです。そのテーブルには、カテゴリIDと投稿IDのみが含まれます。

  2. 投稿テーブルには、カテゴリ自体に関する情報はありません。

于 2012-09-15T13:45:45.480 に答える
2
  1. これに対する正しい mysql テーブル スキーマは何ですか?

    1 つの方法は、関係テーブルを作成することです。

    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;
    
  2. 選択した複数のカテゴリをブログ投稿テーブルにどのように保存しますか?

    そうではありません。それらを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();
    
于 2012-09-15T13:56:58.747 に答える
0

誰もが(私を含めて)使用していると思われる解決策は、@rwilliamsが説明したものです。これらは、クエリが単一のタグに制限されている場合にうまく機能します。2つのタグ(個人用としてタグ付けされ、旅行としてタグ付けされている)をクエリするには、結合を使用する必要があります。クエリがより複雑になると、これは機能しなくなります。MongoDBは私が思うより良い解決策でしょう。

于 2012-09-15T13:48:05.573 に答える
0

多対多の関係では、テーブルを次のように設計できます

caegory table
    categoryId categorydescription

post table    
    postid     postText

a third table to link them    
    categoryId  postId
于 2012-09-15T13:49:54.017 に答える
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

ブログ投稿 My title is tagged as being about yogurt and motor Cycles のエントリを表示しています

于 2012-09-15T13:52:45.387 に答える