У меня есть веб-сайт, в котором перечислены продукты в различных категориях и подкатегориях - довольно стандартный материал. Однако теперь мне нужно перечислить один и тот же продукт в нескольких категориях - как я могу это сделать?
Я использую код:
"SELECT * FROM ProductTable WHERE Category = 1"
Я могу заставить его работать, введя несколько номеров в таблицу Category, т.е. "1 2 3"
и используя код:
"SELECT * FROM ProductTable WHERE Category LIKE 1"
Но это также возвращает продукты из категории 10 и 11 (у меня 20 категорий).
Возможно, я подхожу к этому с неправильного угла, но есть ли способ заставить код работать?
Поскольку у вас больше нет отношения "один ко многим" между категориями и продуктами, вам понадобится новая таблица, чтобы дать желаемые отношения "многие ко многим". Что-то вроде:
product_categories
------------------
category_id INT
product_id INT
Основной ключ: (category_id, product_id)
Это позволит продукту относиться к нескольким категориям нормализованным образом, вместо того чтобы рассматривать поле Category как список идентификаторов.
Хорошо, так что для кого-то другого, пытающегося это сделать, вот мой код:
"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 в соответствии с ответом Дэвида выше. Это третья таблица, в которой хранится список товаров/категорий, каждый продукт имеет отдельную строку для каждой категории, в которой он указан.
Чтобы добавить к davidethell ответ, найдите и прочитайте о "нормализации базы данных". Хорошие и простые отношения являются ключевыми для реляционных баз данных. В Википедии есть хорошая статья, но есть много таких: https://en.m.wikipedia.org/wiki/Database_normalization