SQL Query从表中检索下一个可用ID

时间:2014-06-26 07:42:01

标签: mysql sql

我有一个表,其中包含一个名为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

2 个答案:

答案 0 :(得分:3)

也许我在你的问题中遗漏了一些东西,但似乎应该这样做:

SELECT CONCAT('STK', 
              LPAD(MAX(SUBSTRING(ticket_id, 4)) + 1, 
                   10, 
                   '0')
             ) 
FROM sma_support_tickets;

答案 1 :(得分:0)

尝试:此表必须具有一个序列号或每行的表的唯一编号或ID。通过代码找出该唯一编号(主键)并添加1或增加该编号,但不要像现在这样使用ticket_id。这样它就可以前进到下一行了。