Задавайте вопросы, мы ответим
Вы не зашли.
добрый день,
есть таблица `products` с полем `id` (AUTO_INCREMENT) и полем `sku` (`sku` int(7) unsigned zerofill DEFAULT NULL), которое имеет вид типа 0000001, 0000002 и так далее, где цифра после нулей соответствует `id`. `sku`- это внутренний код магазина. конечно есть возможность программно создавать этот код примерно так:
$sku = sprintf('%07d', $row['id']);, но не проще ли создать триггер для поля `sku` таблицы `products`, который бы автоматически на INSERT продукта создавал бы нужное форматирование от поля `id`?
если создать триггер, то мои рассуждения таковы:
1. открыл таблицу `products`
2. открыл вкладку Триггеры
3. Добавить триггер -> открылась форма, заполнить поля
название - added_sku
таблица - products
время - BEFORE
событие - INSERT
определение : root@localhost (устанавливается при пустом поле автоматически)
BEGIN
?????????????????????????????
END
определитель - оставить пустым
4. нажать кнопку OK
вопрос :
1. как правильно создать триггер (каков будет сам код триггера) для поля `sku` таблицы `products`?
2. как будет вести себя триггер если в дальнейшем обновлять отдельные поля внесенных в таблицу продуктов?
а. мешать обновлению?
б. никак не влиять на дальнейшие обновления?
спасибо за помощь
Неактивен
насколько верно такое решение:
1. открыл таблицу `products`
2. открыл вкладку Триггеры
3. Добавить триггер -> открылась форма, заполнить поля
название - added_sku
таблица - products
время - AFTER
событие - INSERT
определение : root@localhost (устанавливается при пустом поле автоматически)
BEGIN
UPDATE `products` SET
`sku` = concat_ws('', REPEAT('0', 7 - LENGTH(NEW.`id`)), NEW.`id`)
WHERE `id` = NEW.`id`
END
определитель - оставить пустым
4. нажать кнопку OK
спасибо за помощь
Неактивен
А почему просто не определить id как int(7) unsigned zerofill ?
Неактивен
так в таблице поле `sku` и определено как int(7) unsigned zerofill DEFAULT NULL.
проблема в том, что занести в поле `sku` значение поля `id` можно только после INSERT новой записи.
тогда нужно как-то объединить вначале INSERT и UPDATE в одной транзакции.
если не сложно вы можете привести простой пример такого запроса, применительно к моей задаче.
спасибо
Неактивен
зачем вам вообще поле sku, если оно дублирует id?
определите id как int(7) unsigned zerofill.
Неактивен
спасибо за дискуссию, наверное самое лучшее решение удалить дублирующее поле `sku` вообще из таблицы, а в скриптах создавать sku так:
$sku = sprintf('%07d', $row['id']);
так будет самое оптимальное решение?
спасибо
Неактивен
Да, а ещё проще определить id как int(7) unsigned zerofill.
Судя по написанному выше, вы неправильно понимаете значение атрибута zerofill.
Для иллюстрации выполните следующий код:
Неактивен
спасибо, разобрался
Неактивен