разделите продукты и спецификации на две таблицы, подобные этой:
products
id name
specifications
id name value product_id
получить все характеристики продукта, когда вы знаете идентификатор продукта:
SELECT name,
value
FROM specifications
WHERE product_id = ?;
добавить спецификацию к продукту, когда вы знаете идентификатор продукта, название спецификации и значение указанной спецификации:
INSERT INTO specifications(
name,
value,
product_id
) VALUES(
?,
?,
?
);
поэтому, прежде чем вы сможете добавить спецификации к продукту, этот продукт должен существовать. Кроме того, вы не можете повторно использовать спецификации для нескольких продуктов. это потребует более сложного решения :) а именно ...
три таблицы на этот раз:
products
id name
specifications
id name value
products_specifications
product_id specification_id
получить все спецификации продукта, когда вы знаете идентификатор продукта:
SELECT specifications.name,
specifications.value
FROM specifications
JOIN products_specifications
ON products_specifications.specification_id = specifications.id
WHERE products_specifications.product_id = ?;
Теперь добавление спецификации становится немного сложнее, потому что вам нужно проверить, существует ли эта спецификация. так что это будет немного тяжелее, чем первый способ сделать это, так как к БД больше запросов и больше логики в приложении.
сначала найдите идентификатор спецификации:
SELECT id
FROM specifications
WHERE name = ?
AND value = ?;
если идентификатор не возвращается, это означает, что указанная спецификация не существует, поэтому ее необходимо создать:
INSERT INTO specifications(
name,
value
) VALUES(
?,
?
);
далее, либо используйте идентификатор из запроса select, либо получите последний идентификатор вставки, чтобы найти идентификатор вновь созданной спецификации. используйте этот идентификатор вместе с идентификатором продукта, который получает новую спецификацию, и свяжите их вместе:
INSERT INTO products_specifications(
product_id,
specification_id
) VALUES(
?,
?
);
однако, это означает, что вам нужно создать одну строку для каждой конкретной спецификации. например если у вас есть размер для обуви, для каждого известного размера обуви будет один ряд
specifications
id name value
1 size 7
2 size 7½
3 size 8
и так далее. Я думаю, этого должно быть достаточно.