Как связать статью с несколькими категориями

#php #mysql #database-table

#php #mysql #база данных-таблица

Вопрос:

Новичок в PHP / MySQL и создании CMS. Мне нужно знать, как связать статью с несколькими категориями, например, «Моя статья 1» должна быть в 3 категориях, а «Моя статья 2» должна быть только в 2 и т.д.

По сути, это просто таблица, созданная для начала. Вот что у меня есть:

 Table = articles
Fields = id, publicationDate, title, summary, content

Table = categories
Fields = id, categoryTitle
  

Я немного знаю об объединениях, связях и т. Д., Но я хочу разобраться в этом с самого начала.

Ответ №1:

Вам нужна таблица «многие ко многим», которая будет связывать идентификаторы статей с идентификаторами категорий

 CREATE TABLE articles_categories (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    articles_id INT,
    category_id INT
) TYPE=myisam;
  

Таким образом, для каждой категории, которую вы связываете со статьей, вам нужно будет вставить строку в эту таблицу.

Возможно, что-то вроде:

 $currentArticle = array('id' => 99, 'name' => 'Test Article');
$currentCategory = array('id' => 1, 'name' => 'First Category');
mysql_query(sprintf('INSERT INTO articles_categories (articles_id, category_id) VALUES (%d, %d)', $currentArticle['id'], $currentCategory['id']));
  

Ответ №2:

Вам нужна третья таблица с именем article_to_categories или что-то еще, с двумя полями:

  • article_id
  • category_id

Добавьте запись для каждой статьи и ассоциации категорий. Установите PK для обоих столбцов.

Комментарии:

1. Я не знал, что у вас может быть два первичных ключа в одной таблице

2. Не два первичных ключа … один ключ, который использует оба столбца. Это называется составным ключом. В качестве альтернативы вы можете добавить еще один столбец, но это просто пустая трата места, поскольку в этой таблице не будет ничего, кроме этих ассоциаций.

3. Хорошо, я попробую это сейчас. В качестве примера, как я мог бы вернуть информацию в SQL-запросе, например. Моя статья 1 находится в категории 1, категории 2 и категории 3?

4. SELECT categories.* FROM categories, articles_to_categories WHERE categories.id=articles_to_categories.category_id AND articles_to_categories.article_id=12345;