Sinh mã số theo dải quy định trước


Như đã nói trong comment trước. Em sẽ trình bày một phương pháp sử dụng trường autoincrement để sinh mã số theo dải số quy định trước.

Như các bác thấy, trong thực tế, có rất nhiều trường hợp gặp phải ví dụ như là, mỗi một thành phố có một dải số chứng minh thư riêng chẳng hạn, hoặc trong một nhà máy, ID của mỗi sản phẩm họ quy định một dải số riêng như kem đánh răng thì từ 10000 đến 20000, còn bàn chải thì từ 20001 đến 30000…

Vậy thì làm thế nào? Cách đơn giản mà ta có thể nghĩ ra ngay là sử dụng một cơ chế khóa để luôn đảm bảo quá trình sinh mã được thực hiện theo thứ tự lần lượt. Em sẽ không comment gì cách này nữa.

Cách của em muốn đề cập ở đây là sử dụng một bảng như sau:

CREATE TABLE `seq` (
`CODE` varchar(255) NOT NULL,
`AUTO` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`CODE`),
UNIQUE KEY `CODE` (`CODE`,`AUTO`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1

Sau đó định nghĩa giá trị ban đầu của dải KEMDANHRANG là 9999 và dải BANCHAI là 20000

INSERT INTO `seq` (`CODE`, `AUTO`) VALUES (‘KEMDANHRANG’, ‘9999’);
INSERT INTO `seq` (`CODE`, `AUTO`) VALUES (‘BANCHAI’, ‘20000’);

Sau đó, nếu bạn muốn tính toán mã tiếp theo của bàn chải chẳng hạn, bạn sử dụng query sau:

replace into seq (`CODE`,`AUTO` ) values (‘BANCHAI’, ”)

Lúc này, giá trị trả về của mysql_insert_id sẽ là auto number tiếp theo của bàn chải (là 20001).

Tương tự như vậy:

replace into seq (`CODE`,`AUTO` ) values (‘KEMDANHRANG’, ”)

Sau truy vấn này, mysql_insert_id trả về 10000 (auto number của dải kem dánh răng).

Tất nhiên để kiểm soát giá trị trên của dài. Sau khi lấy được mã, chúng ta phải tự so sánh giá trị lấy được với giá trị trên để xem mã vừa lấy được có phù hợp hay không.

http://i-php.net/2011/04/sinh-ma-so-theo-dai-quy-dinh-t/

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s