Есть таблица:
products
id | product_id | name | variant | price
1 0 мышь красная 150
2 0 мышь синяя 150
3 0 мышь белая 150
id заполняется сам, как сделать так, чтобы при создании нового товара он искал такой же name и если он существует, подставлял product id, а также при создании нового товара создавался новый product_id и также при создании вариации сравнивался с name.
Триггер нужно постоянно вызывать, а нужна автоматизация.
Может подскажите? Может нужно несколько таблиц или ещё что-то?
Триггер не нужно постоянно вызывать, это и есть автоматизация.
Но никакой триггер здесь не нужен.
Всё что тут понаписано - это какие-то завиральные идеи от неграмотности.
И их надо просто выкинуть из головы.
поле product_id не имеет смысла, его надо убрать из таблицы
в name ничего подставлять не надо.
что значит сравнивать?
вы можете внятно описать свои проблемы?
что вам нужно сравнивать, и зачем?
какую исходную задачу вам надо решить? Для чего вы городите весь этот зоопарк?
Ипатьев, Исходная задача такова: Есть сайт с товарами, карточками для товаров, при заходе в карточку можно выбрать вариацию товара в select'e, товары расфасовываются по product_id, 1 product_id - 1 товар, а вариации уже соответственно подставляются в селекте
значит надо как минимум две таблицы, а скорее всего и больше.
товары добавляются в таблицу товаров
вариации добавляются в таблицу вариаций
но это слишком упрощенная схема.
у трусов, например, будет две вариации - цвет и размер.
Ипатьев, Скорее всего вы правы, если у меня на выходе будет такой json со связью многие ко многим, будет ли это правильный вариант?
{
"id": 1,
"name": "Мышь",
"variant": [
{
"id": 2,
"title": "Мышь красная",
"img": "src/assets/red_mouse.png",
"color": "red",
"price": 190,
"productId": 1
},
{
"id": 3,
"title": "Мышь белая",
"img": "src/assets/white_mouse.png",
"color": "white",
"price": 200,
"productId": 1
}
]
}
Непонятно, зачем во вложенном массиве productId
Плюс как я говорил, параметров может быть больше одного.
И вообще, мышь - это не товар, а категория товара.
Ипатьев, Это просто пример, ничего приближенного с товаром. Да, возможно параметров может быть больше, но мне пока что хватает и этого, productId возможно лишний
Правильно делить это на две таблицы: продукты и варианты. Но если хочется странного то вуаля:
insert into products (product_id, name, variant, price)
select
coalesce (
min(case when name = 'мышь' then product_id end ),
coalesce(min(product_id), 0) + 1
) product_id
,'мышь', 'красная', 150
from products;
Когда вы уже поймете, что эти люди не "хотят" странного. Они просто сами не знают, чего им надо
подставлять продакт айди по названию - это идиотизм. На практике это не имеет ни малейшего смысла