我有一个表,其中包含一个名为ticket_id的列,它包含如下值:
ticket_id
STK0000000001
STK0000000002
STK0000000001
STK0000000003
STK0000000002
STK0000000001
ticket_id值将在某些行中重复,因此它不是唯一的。
我正在使用此查询来获取下一个可用的ID,但我无法使其正常工作。它总是返回STK0000000002
。
感谢任何帮助!
SQL:
SELECT
CONCAT('STK', LPAD(seq, 10, '0')) AS nextID
FROM
(SELECT
@seq:=@seq+1 AS seq,
num
FROM
(SELECT
CAST(SUBSTR(ticket_id, 4) AS UNSIGNED) AS num
FROM
sma_support_tickets
UNION ALL
SELECT
MAX(CAST(SUBSTR(ticket_id, 4) AS UNSIGNED))+2 AS num
FROM
sma_support_tickets
ORDER BY
num) AS ids
CROSS JOIN
(SELECT @seq:=0) AS init
) AS pairs
WHERE
seq!=num
LIMIT 1
答案 0 :(得分:3)
也许我在你的问题中遗漏了一些东西,但似乎应该这样做:
SELECT CONCAT('STK',
LPAD(MAX(SUBSTRING(ticket_id, 4)) + 1,
10,
'0')
)
FROM sma_support_tickets;
答案 1 :(得分:0)
尝试:此表必须具有一个序列号或每行的表的唯一编号或ID。通过代码找出该唯一编号(主键)并添加1或增加该编号,但不要像现在这样使用ticket_id。这样它就可以前进到下一行了。