У меня есть простая таблица в MySQL, который имеет различные типы записей, отличить по значениям в столбце ptype
автоматического приращения, используя «случая» в MySQL
мой стол выглядит как этот
id1 ... ptype..usr ... item
1 ..... 43 ....... 2 ...... 7001
2 ..... 44 ....... 2. ..... 8001
3 ..... 43 ....... 2 ...... 7002
4 ..... 43 ....... 2 ... ... 7003
5 ..... 43 ....... 3 ...... 7001
Когда я добавляю новую запись, мне нужен мой запрос, чтобы вставить автоматически увеличиваемое значение в столбец item
, основанный на ptype
и специфичный для usr
. т.е. если я вношу новую запись
id1 ... ptype..usr ... item
6 ..... 43 ....... 3 ......?
было бы добавить 1 к существующему для PTYPE = 43 и USR = 3 id1 ... ptype..usr наибольшего числа ...
пункта 6 ..... 43 ....... 3 ...... 7002
если мы добавили еще одну запись для PTYPE = 44 и USR = 2 id1 ... ptype..usr ... товар
7 ..... 44 ... .... 2 ...... 8002
Я думаю, что я должен сделать это, предварительно вставив новую запись с item
пустым, а затем обновив эту запись с информацией, полученной из новой записи (то есть @lastid), используя СЛУЧАЙ, КОГДА ТОГДА метод, но он не работает.
SET @lastid := LAST_INSERT_ID();
SET @ptype = (SELECT `ptype` FROM a1 WHERE `id1` = @lastid);
SET @item = (SELECT (
CASE
when @ptype = 41 then (SELECT 1 + coalesce((SELECT max(`item`) FROM `a1` WHERE `ptype` = 41 AND `plate`=7 AND `userid` = @userid), 5000))
when @ptype = 42 then (SELECT 1 + coalesce((SELECT max(`item`) FROM `a1` WHERE `ptype` = 42 AND `plate`=7 AND `userid` = @userid), 6000))
when @ptype = 43 then (SELECT 1 + coalesce((SELECT max(`item`) FROM `a1` WHERE `ptype` = 43 AND `plate`=7 AND `userid` = @userid), 7000))
when @ptype = 44 then (SELECT 1 + coalesce((SELECT max(`item`) FROM `a1` WHERE `ptype` = 44 AND `plate`=7 AND `userid` = @userid), 8000))
when @ptype = 45 then (SELECT 1 + coalesce((SELECT max(`item`) FROM `a1` WHERE `ptype` = 45 AND `plate`=7 AND `userid` = @userid), 9000))
when @ptype = 46 then (SELECT 1 + coalesce((SELECT max(`item`) FROM `a1` WHERE `ptype` = 46 AND `plate`=7 AND `userid` = @userid), 10000))
ELSE 0
end) as item
from
a1 WHERE `id1` = @lastid);
UPDATE a1 SET item
= @item WHERE id1 = @lastid
как есть, @item возвращается значение 0 изначально, независимо от того, какой 'PTYPE' новая запись имеет, и увеличивающиеся на 1 для последующих записей .... мне нужна первая запись добавляется в каждом PTYPE быть 5001 6001, 7001 и т.д.
довольно сладкий ответ, Я завернул его в транзакцию, и он работает красиво. eggyal также кажется правильным, но я не думаю, что могу использовать триггер, потому что у меня есть другие инструкции вставки, вставляемые в эту же таблицу. Благодаря!! – Nat