01/10/2018, 00:56
Tự sinh mã hóa đơn đặt hàng
mình đang làm bài toán có một hóa đơn mà mỗi hóa đơn thì cần mã hóa đơn để ghi vào cơ sở dữ liệu .Mình có thử vài gải pháp nhưng chưa có cái nào ưng lắm mong các bạn có thể gợi ý cho mình được ko vd có một form đăng ký đặt hàng thì mỗi lần ấn nút đặt hàng thì nó sẽ tự sinh mã cho hóa đơn cho nó và các mã ko được trùng nhau
Bài liên quan
Bạn tạo một trường order_id với thuộc tính auto_increment { tự động tăng } - làm khóa chính là được [khi insert dữ liệu vào table, dữ liệu sẽ tự tăng cho trường này - không trùng nhau]
Ví dụ : create table order(
order_id int unsigned not null primary key auto_increment,
customer,
…
);
Khi insert dữ liệu vào bảng thì không cần insert cho trường này, câu truy vấn:
insert into order (customer,…) values(‘Nguyễn Văn A’,…);
Đây là cách cơ bản - vì quy tắc cho mã hóa đơn có thể phụ thuộc vào từng “project” nên không thể có ‘một cách cố định’. Ví dụ: ASN0001-15 = “Áo sơ mi nam - đơn số 1, năm 2015”. Trong đó, ASN có thể lấy quy tắc từ sản phẩm, đơn số 1 thì lấy từ order_id, 15 thì sử dụng code lấy năm từ 2000 trở về sau…vv
muốn thêm chũ đằng sau thì làm thế nào bạn vd như là P1 chả han tiếp theo là P2 bạn và P3 vd thế
Do quy tắc tính mã hóa đơn có thể thay đổi => nếu có vấn đề cần truy xuất ngược trở lại để lấy dữ liệu có thể không chính xác [giữa mã hóa đơn có quy tắc cũ hoặc mã hóa đơn có quy tắc mới] => thống nhất sd thêm 1 trường hóa đơn [sd để xuất cho khách hàng] gọi là order_code, kiểu dữ liệu: varchar(50) - khi insert dữ liệu vào bảng => bạn lấy dữ liệu max order_id từ bảng hóa đơn được max_order_id , sd hàm nối chuỗi để được order_code => câu truy vấn:
//
order_code = “P”.(phép toán nối chuỗi).(max_order_id+1)
insert into order (customer, order_code) values(‘Nguyễn Văn A’, ‘P2’);
Hoặc nếu không thì lưu lịch sử quy tắc tính mã hóa đơn, thêm 1 trường cho version của công thức:
vd:
v1 = P(id) //P1…ETC
v2 = S(id) //S1 …etc
khi truy xuất từ mã hóa đơn dạng P1 => dựa vào version của công thức để lấy ra được order_id, từ đó thao tác dữ liệu theo order_id.
bạn tao một bảng mẫu cho mình được ko mình vẫn chưa hiểu lắm
Tạo bảng order:
streampow sức mạnh tự học - php mysql html css
CREATE TABLE order(
order_id int unsigned not null primary key auto_increment,
order_code varchar(50),
customer varchar(120),
email varchar(120),
phone varchar(15),
add_time datetime,
last_update datetime
product_id int unsigned not null);
Sử dụng code php:
Tham khảo thao tác cơ sở dữ liệu bằng php:
Thao tác với cơ sở dữ liệu - kết hợp php và mysql
Tìm hiểu quy trình làm việc giữa php và mysql: kết nối tới cơ sở dữ liệu, thực thi truy vấn, xử lý kết quả...
Mình nghĩ bảng này của bạn nên tách thành 2 bảng Order và Order_Detail, thiếu trường Created_By và Updated_By. Không nên đưa product_id vào order, nếu có thì bạn thiếu trường số lượng.
@Do_Nhien Bạn có thể tham khảo 4 bảng này