2014-06-26 2 views
1

я таблица, которая содержит столбец называется TICKET_ID и он содержит следующие значения:SQL-запрос, чтобы получить следующий доступный идентификатор из таблицы

ticket_id 
STK0000000001 
STK0000000002 
STK0000000001 
STK0000000003 
STK0000000002 
STK0000000001 

Значение TICKET_ID будет повторяться в некоторых строках, так что это не является уникальным ,

Я использую этот запрос, чтобы получить следующий доступный идентификатор, но я не могу заставить его работать. Он всегда возвращает STK0000000002.

Любая помощь приветствуется!

SQL:

SELECT 
    CONCAT('STK', LPAD(seq, 10, '0')) AS nextID 
FROM 
    (SELECT 
     @seq:[email protected]+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

Вы можете хранить строку отдельно от целого? – Strawberry

+0

Несомненно @Strawberry, база данных существует, и я помогаю с изменениями. Это было построено когда-то. – TheRealPapa

+0

Если он всегда начинается с 'STK', полностью оставьте это из базы данных. Просто поместите его в пользовательский интерфейс, если хотите. – Barmar

ответ

3

Может быть, я что-то в вашем вопросе не хватает, но мне кажется, что это нужно сделать, это:

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

Привет @shmosel, вы ROCK! Благодаря! Я изменял чужую работу, а не смотрел на нее с нуля ... это прекрасно! – TheRealPapa

+0

Я думал, что могут быть пропущены номера ... – Fabricator

0

Попытка: Эта таблица должна иметь один серийный номер или уникальный номер или идентификатор таблицы для каждой строки. Узнайте это уникальное число (первичный ключ) через код и добавьте 1 или увеличивайте это число, но не на ticket_id, как вы это делаете сейчас. так что он может двигаться вперед к следующей строке.

Смежные вопросы