одна статья по нескольким категориям

Мне нужно добавить статью к нескольким категориям, например, мне нужно указать статью «тестовая статья», чтобы добавить ее в категорию 1 и категорию2, чтобы знать, как установить связь между таблицами для этого

примечание: в прошлом я делаю строку в статье базы данных таблицы «категория» и добавляю идентификатор категории, например, 1,2,3, но это создает проблему в поиске и списке, пожалуйста, помогите мне в этом

Solutions Collecting From Web of "одна статья по нескольким категориям"

Вам нужны три таблицы:

  • Один стол для articles
  • Одна таблица для categories
  • Одна таблица, связывающая статьи с категориями, мы можем назвать ее categories_per_article . Эта таблица часто называется таблицей Junction или таблицей ассоциации .

Пример данных:

 ARTICLES ID | Name | Description 1 | Fuzz | A fuzzy three 2 | Bizz | A five that means bizznezz CATEGORIES ID | Name 1 | Prime numbers 2 | Multiples of five 3 | Smaller than four CATEGORIES_PER_ARTICLE ID | ARTICLE_ID | CATEGORY_ID 1 | 1 | 1 2 | 1 | 2 3 | 1 | 3 4 | 2 | 1 

Вы увидите, что статья 1 (Fuzz) имеет три категории, а статья 2 (Bizz) имеет только категорию 1. Мы называем это отношением « многие ко многим» (или n-to-n, например, в ER или UML) потому что статья 1 имеет несколько категорий, а категория 1 используется несколькими статьями.

Вы можете делать все возможные запросы с помощью этой схемы – не стесняйтесь спрашивать в комментариях для конкретных примеров (например, How do I get all articles which have categories 1 and 3 but not 2 ).

Связь между статьей и категорией является отношением n-to-n.
Статья может принадлежать нескольким категориям, а категория может быть прикреплена к нескольким статьям.

Поскольку SQL не поддерживает отношения n-to-n напрямую, вам нужна таблица ссылок.

 Table article_cats ------------------ cat_id integer, article_id integer, primary key (cat_id, article_id) 

Затем вы связываете статьи так:

 SELECT a.name, GROUP_CONCAT(c.name) as cats FROM articles a LEFT JOIN article_cats ac ON (a.id = ac.article_id) LEFT JOIN cats c ON (c.id = ac.cat_id) GROUP BY a.id 

У вас есть отношения «многие ко многим»: статьи могут иметь несколько категорий, а категории, очевидно, могут иметь в себе несколько статей. Это не может быть правильно представлено без по крайней мере еще одной таблицы, которая явно сохраняет ассоциации между вашими сущностями.