Можно ли перечислить один и тот же элемент в нескольких категориях с помощью PHP / MySQL?

0

У меня есть веб-сайт, в котором перечислены продукты в различных категориях и подкатегориях - довольно стандартный материал. Однако теперь мне нужно перечислить один и тот же продукт в нескольких категориях - как я могу это сделать?

Я использую код:

"SELECT * FROM ProductTable WHERE Category = 1"

Я могу заставить его работать, введя несколько номеров в таблицу Category, т.е. "1 2 3" и используя код:

"SELECT * FROM ProductTable WHERE Category LIKE 1"

Но это также возвращает продукты из категории 10 и 11 (у меня 20 категорий).

Возможно, я подхожу к этому с неправильного угла, но есть ли способ заставить код работать?

Теги:
database

3 ответа

1

Поскольку у вас больше нет отношения "один ко многим" между категориями и продуктами, вам понадобится новая таблица, чтобы дать желаемые отношения "многие ко многим". Что-то вроде:

product_categories
------------------
category_id INT
product_id INT

Основной ключ: (category_id, product_id)

Это позволит продукту относиться к нескольким категориям нормализованным образом, вместо того чтобы рассматривать поле Category как список идентификаторов.

  • 0
    Спасибо за это, но не могли бы вы уточнить? Я создал таблицу категорий и изменил код на «SELECT * FROM ProductTable INNER JOIN CategoryTable ON ProductTable.Category = CategoryTable.Category_ID WHERE Category_ID = 1» Как получить один и тот же продукт на несколько категорий?
  • 0
    О, подожди, я думаю, что это щелкнуло - мне нужно использовать таблицы, чтобы эффективно создавать дубликаты продуктов? Т.е. при использовании одной таблицы мне нужно было бы создать дублирующую строку для каждой категории, в которой товар появляется (удвоение или даже утроение размера базы данных), но используя таблицы, мне просто нужно дублировать идентификатор?
Показать ещё 1 комментарий
0

Хорошо, так что для кого-то другого, пытающегося это сделать, вот мой код:

"SELECT * FROM ProductTable INNER JOIN (LinkTable INNER JOIN CategoryTable ON LinkTable.intCategory = CategoryTable.intCategoryID) ON ProductTable.intProductID = LinkTable.intProduct WHERE LinkTable.intCategory =% s"

У меня три таблицы: первая - таблица продуктов, каждый продукт имеет уникальный номер, который является первичным ключом. Вторая - таблица категорий, каждая категория имеет уникальный номер, который является первичным ключом. Затем я создал третью таблицу с двумя столбцами; intProduct и intCategory в соответствии с ответом Дэвида выше. Это третья таблица, в которой хранится список товаров/категорий, каждый продукт имеет отдельную строку для каждой категории, в которой он указан.

0

Чтобы добавить к davidethell ответ, найдите и прочитайте о "нормализации базы данных". Хорошие и простые отношения являются ключевыми для реляционных баз данных. В Википедии есть хорошая статья, но есть много таких: https://en.m.wikipedia.org/wiki/Database_normalization

  • 0
    Спасибо, у меня сейчас тщательный поиск в Google. Я изменил свою базу данных, чтобы переместить элементы, такие как имя категории, в разные таблицы, но мне все еще нужно понять, как заставить один и тот же продукт появляться в нескольких категориях.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню