P H P  V I E T  N A M  P O R T A L
Xin chào, Khách. Vui lòng đăng nhập hoặc đăng ký tài khoản.
Bạn đã quên email kích hoạt?






     Trang chủ | Download | Tự học PHP | Kho tư liệu | Diễn đàn
Trang: [1]
  In  
This topic has not yet been rated!
You have not rated this topic. Select a rating:
Tác giảChủ đề: Tự động sinh dữ liệu cho một trường DB  (Đã đọc 2488 lần)
ha_bogay
PHP Intermediate
*
Posts: 30


http://botsanday.com

botsanday
Xem hồ sơ WWW
« on: June 21, 2010, 09:39:04 PM »

Tự động sinh dữ liệu cho một trường DB

(đọc bài viết đầy đủ tại http://i-php.net)

Rất nhiều trường hợp chúng ta cần tự sinh mã , chuỗi cho một số trường khi dữ liệu được insert vào database .

Ví dụ mỗi sinh viên Aptech sẽ có mã kiểu như A000856 , 856 đơn giản là ID của sinh viên , nhưng toàn bộ hệ thống aptech toàn cầu chỉ quản lý thông qua code chứ không phải ID . Chính vì vậy code trên tự sinh ra từ ID là ngon nhất .

Cách làm :
   1. Dùng table
      CREATE TABLE Aptech_Student
      (
      sname varchar(15),
      ID int identity(1,1),
      code AS 'A' + RIGHT(DATENAME(yy,GETDATE()),2) +RIGHT('0000'+CAST(ID AS varchar(4)),4)
      )
      Test:
      insert into test (sname) values (1)
      --
      select *from test
      --
      sname ID student_ID
      1 1 A00001
   2. Dùng function
      create function CustomerNumber (@id int)
      returns char(5)
      as
      begin
      return 'C' + right('0000' + convert(varchar(10), @id), 4)
      end
      --
      Gán hàm trên vào cột:
      alter table Customers add CustomerNumber as dbo.CustomerNumber(dbID)
      hoặc gán vào trigger

      Dùng trigger
      alter Customers add CustomerNumber varchar(10)

      create trigger Customers_insert
      on Customers after insert
      as
      update Customers
      set Customers.customerNumber = dbo.CustomerNumber(Customers.dbID)
      from Customers inner join inserted
      on Customers.dbID= inserted.dbID
   3. Dùng proc
      create procedure prcGenCode
      @codeno char(6) OUTPUT
      as
      select @codeno = Max(Ccodeno) from testtable
      select @codeno =
      case
      when @codeno >=0 and @codeno < 9 then '00000' + convert(char,@codeno + 1)
      when @codeno >=9 and @codeno < 99 then '0000' + convert(char,@codeno + 1)
      when @codeno >=99 and @codeno < 999 then '000' + convert(char,@codeno + 1)
      when @codeno >=999 and @codeno < 9999 then '00' + convert(char,@codeno + 1)
      when @codeno >=9999 and @codeno < 99999 then '0' + convert(char,@codeno + 1)
      when @codeno >=99999 then convert(char,@codeno + 1)
      end
      return


(đọc bài viết đầy đủ tại http://i-php.net)

Thân ái .
Logged

http://botsanday.com
* Bột sắn dây Bà Hằng nguyên chất – số 6 ngõ An Trạch 2 – Đoàn Thị Điểm – phường Quốc Tử Giám - quận Đống Đa - Hà Nội
* Sdt: 04.3.7320.657 - DĐ: 090.210.6569
* Nick YM: botsanday
thanhdvqn
PHP Starter
*
Posts: 4


Xem hồ sơ
« Trả lời #1 on: March 23, 2011, 07:36:01 PM »

Tôi nghĩ đây là một vấn đề khá thú vị vì việc sinh dữ liệu cho một field nào đó từ các field khác trong một bảng là công việc thường xuyên của các hệ QTCSDL và NNLT. Việc dùng thông qua ID thực chất là một trường hợp đặc biệt vì nó phụ thuộc vào thứ tự vật lý khi nhập dữ liệu vào. Vấn đề là sinh dữ liệu cho trường khác không phụ thuộc vào id. Bạn cho ý kiến về vấn đề này khi dùng mysql và php giúp nhé.
Ví dụ: Bảng hocsinh.dbf có hai field name, sbd (số báo danh). Muốn đánh số báo danh theo họ tên từ A001....A00n (n - là số mẫu tin). Giả thiết rằng dữ liệu nhập vào ngẫu nhiên và sắp xếp lại theo thứ tự alphabet rồi mới đánh số báo danh
name      sbd
An         A001
Binh       A002
Cuong    A003
Nam       A004
Trong visual foxpro tôi code như sau
use hocsinh
* Tao chỉ mục (sắp xếp) theo tên
go top
m_sbd=1
Do while !eof()
Repl sbd with m_sbd
m_sbd=m_sbd +1
skip
Enddo
Vậy trong mysql và php nhờ bạn code giúp?
Logged
thanhdvqn
PHP Starter
*
Posts: 4


Xem hồ sơ
« Trả lời #2 on: March 23, 2011, 07:38:34 PM »

Đoạn code trên chưa xử lý thêm chữ 'A' nhé bạn.
Logged
Trang: [1]
  In  
 
Chuyển sang:  

Powered by SMF 1.1.15 | SMF © 2006-2007, Simple Machines . Modified by PHPVN Members