如何使用自動增量並將其與日期字段組合以生成該日期的序列號並因此生成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的ticketId。假設你以前從不復古添加票據,即使在大量使用情況下,也只需要這兩個查詢。
[編輯]事實上,在研究這個之後,有一種更好的方式可以在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
當ID值。 YOu可以先進行INSERT,然後獲取新ID並使用它來更新您的門票號碼 – musefan
@musefan:我首先想到了這一點。但這是另一回事。機票號碼基本上是機票的日期,然後是機票的創建位置或訂單。例如201111070001,2011111070002,2011111070003,201111107000X。然後當第二天到來時,它將像這樣重置:201111080001,依此類推。那我會怎麼做? –
我將創建一個答案,以便我可以解釋更多細節。 – musefan