Как насчет использования автоинкремента и объединения его с полем даты для генерации порядкового номера на эту дату и, следовательно, ticketId.
Итак, ваш процесс вставки будет выглядеть примерно так:
INSERT INTO table (...ticket info...)
Затем вы получите автоприращение для этой строки и выполните запрос, подобный этому
UPDATE table SET sequence = (SELECT ($id-MAX(auto_increment)) FROM table WHERE date_created=DATE_SUB(CURDATE(),INTERVAL 1 DAY)) WHERE auto_increment=$id
Вы можете легко создать тикет в формате YYYMMDDXXXX. Предполагая, что вы никогда не добавляли ретро-билеты в прошлом, это потребует только этих двух запросов даже при интенсивном использовании.
[РЕДАКТИРОВАТЬ] На самом деле, после изучения этого есть гораздо лучший способ сделать это изначально в MySQL. Если вы определите два столбца (дата и последовательность) и сделаете их первичным ключом (оба столбца) с полем последовательности в качестве автоинкремента, то MySQL обновит столбец последовательности как автоинкремент на дату (т.е. он будет начинаться со значения 1 за каждую дату).
[РЕДАКТИРОВАТЬ] Структура таблицы по этим направлениям сделает работу за вас:
CREATE TABLE IF NOT EXISTS `table` (
`created_date` date NOT NULL,
`ticket_sequence` int(11) NOT NULL auto_increment,
`label` varchar(100) NOT NULL,
[other fields as required]
PRIMARY KEY (`created_date`,`ticket_sequence`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
При получении данных вы можете сделать что-то вроде
SELECT CONCAT( DATE_FORMAT(created_date,'%Y%m%d'),LPAD(ticket_sequence,4,'0')) AS ticket_number, other fields.... FROM table