mysql に、列の値によって区別されるさまざまな種類のレコードを持つ単純なテーブルがありますptype
私のテーブルはこんな感じ
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......?を挿入すると、
ptype=43 および usr=3 id1...ptype..usr...item
6.....43.......3......の既存の最大数に 1 を追加します。 7002
ptype=44 および usr=2 の別のレコードを追加した場合 id1...ptype..usr...item
7.....44.......2......8002
最初に新しいレコードをitem
空白で挿入し、CASE WHEN THEN メソッドを使用して新しいレコード (つまり @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 は、新しいレコードの 'ptype' に関係なく、最初は 0 の値を返し、後続のエントリに対して 1 ずつ増加します.... 各 ptype に追加される最初のレコードを 5001 6001, 7001 にする必要があります。など