使用「案例」我有一個簡單的表中有不同類型的記錄mysql的,由值列ptype
自動遞增在MySQL
我的表看起來像這樣
ID1區別... ptype..usr ...項目
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 ...項目
6 ..... 43 ....... 3 ......?
這將增加1到現有用於p-型= 43和USR = 3 ID1 ... ptype..usr最高號碼...項
6 ..... ....... 43 3 ...... 7002
,如果我們增加了P型= 44和USR = 2 ID1 ... ptype..usr再創歷史新高......項目
7 ..... 44 ... .... 2 ...... 8002
我想我應該這樣做,通過最初插入新記錄與item
空白,然後更新該記錄從新記錄(即@lastid)派生的信息使用CASE WHEN THEN方法,但它不起作用。
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值,不管是什麼 'p型' 的新記錄,並通過增加1對於後續條目....我需要在每個P型添加的第一個記錄是5001 6001,7001,等
非常甜蜜的答案,我把它包裝在一個交易中,它的運作非常好。 eggyal的似乎也是正確的,但我不認爲我可以使用觸發器,因爲我有其他插入語句插入到同一個表中。謝謝!! – Nat