Мне нужно добавить статью к нескольким категориям, например, мне нужно указать статью «тестовая статья», чтобы добавить ее в категорию 1 и категорию2, чтобы знать, как установить связь между таблицами для этого
примечание: в прошлом я делаю строку в статье базы данных таблицы «категория» и добавляю идентификатор категории, например, 1,2,3, но это создает проблему в поиске и списке, пожалуйста, помогите мне в этом
Вам нужны три таблицы:
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
У вас есть отношения «многие ко многим»: статьи могут иметь несколько категорий, а категории, очевидно, могут иметь в себе несколько статей. Это не может быть правильно представлено без по крайней мере еще одной таблицы, которая явно сохраняет ассоциации между вашими сущностями.