Chào các bác, Chả là hiện tại em muốn tạo Unique ID cho sản phẩm trong database, mỗi UID này có chiều dài 7 ký tự. Em đang phân vân 1 chút trong việc tạo ra UID này như sau: + Column dạng char thì tốc độ truy vấn không bằng int + Dùng auto_increment thì không đảm bảo được chiều dài dữ liệu == 7 ký tự + Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query check trong db xem tồn tại hay chưa => có thể mất nhiều query check trong khi tạo ra được 1 UID + Dùng auto_increment thì lại lãng phí ID (với những ID bị xóa đi thì sẽ không dùng lại được) Bác nào đã giải quyết vấn đề này thì cho mình xin cao kiến với :)
Chào bạn, câu hỏi của bạn cũng là một trong các vấn đề tôi đang phân vân. Sau đây là cách giải quyết của tôi từ trước đến giờ:
1. Unique ID trong dành để thao tác trong Database luôn là kiểu số, field này không thể hiện lên GUI. Nếu có mã sản phẩm hiển thị lên GUI thì có thể cho người dùng nhập hoặc tự phát sinh. 2. Nếu mã sản phẩm theo 1 định dạng nào đó, SPM0001 (Sản phẩm loại M), SPM0002: * Select max cái ID kiểu số, cộng thêm 1 rồi dùng str_pad (http://php.net/manual/en/function.str-pad.php) để thao tác xử lý chuỗi. Cộng vào chuỗi định dạng của mã sản phẩm. * Hoặc sử dụng seed random, với seed là time_stamp hiện tại. Nhưng kiểu này đòi hỏi phải query kiểm tra dưới database. * Có thể dùng Trigger/Stored Procedure/Function trong database. 3. Riêng về vấn đề xóa thì đó giờ chưa xóa trong database, mà chỉ là đánh dấu xóa thôi. Có một thuộc tính cho biết record đó là xóa hay chưa xóa.
Đó là ý kiến, kinh nghiệm cá nhân. Mong đợi cao kiến từ mọi người. :D
On 12/27/2011 10:31 AM, Hùng Nguyễn wrote:
> Chào các bác, > Chả là hiện tại em muốn tạo Unique ID cho sản phẩm trong database, mỗi > UID này có chiều dài 7 ký tự. Em đang phân vân 1 chút trong việc tạo > ra UID này như sau: > + Column dạng char thì tốc độ truy vấn không bằng int > + Dùng auto_increment thì không đảm bảo được chiều dài dữ liệu == 7 ký > tự > + Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query check trong > db xem tồn tại hay chưa => có thể mất nhiều query check trong khi tạo > ra được 1 UID > + Dùng auto_increment thì lại lãng phí ID (với những ID bị xóa đi thì > sẽ không dùng lại được) > Bác nào đã giải quyết vấn đề này thì cho mình xin cao kiến với :)
-- ------------------------------------------------------------------------ *Giã Dương Đức Minh *
+ Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query check trong => dung luôn hàm time() ấy, substr(time(), 3) => lấy 7 ký tự cuối, thời gian luôn trôi đi ko bao giờ có sự lặp lại cả nên bạn không cần phải kiểm tra đã có hay chưa
-----Original Message-----
From: phpvietnam@googlegroups.com [mailto:phpvietnam@googlegroups.com] On Behalf Of Hùng Nguy?n
Sent: Tuesday, December 27, 2011 10:32 AM
To: PHPVietnam
Subject: [PHPVietnam] Xin ý kiến mọi người về tạo unique ID trong database
Chào các bác,
Chả là hiện tại em muốn tạo Unique ID cho sản phẩm trong database, mỗi
UID này có chiều dài 7 ký tự. Em đang phân vân 1 chút trong việc tạo
ra UID này như sau:
+ Column dạng char thì tốc độ truy vấn không bằng int
+ Dùng auto_increment thì không đảm bảo được chiều dài dữ liệu == 7 ký
tự
+ Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query check trong
db xem tồn tại hay chưa => có thể mất nhiều query check trong khi tạo
ra được 1 UID
+ Dùng auto_increment thì lại lãng phí ID (với những ID bị xóa đi thì
sẽ không dùng lại được)
Bác nào đã giải quyết vấn đề này thì cho mình xin cao kiến với :)
-- Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google Groups "PHPVietnam".
Để đăng bài lên nhóm này, hãy gửi email đến phpvietnam@googlegroups.com.
Để hủy đăng ký khỏi nhóm này, hãy gửi email tới phpvietnam+unsubscribe@googlegroups.com.
Để biết tùy chọn khác, hãy truy cập nhóm này tại http://groups.google.com/group/phpvietnam?hl=vi.
Tôi thấy vậy vẫn chưa ổn. Ví dụ ra 123 4567890 và 321 4567890. Tôi thử làm một phép tính là, nếu lấy 7 ký tự cuối thì cứ 10 000 000 giây là bị trùng 7 ký tự cuối 1 lần. --> 10 000 000/(60*60*24) = khoảng 115 ngày. Dù trùng đúng số giây là rất khó, khả năng vẫn còn khá cao nếu dùng lâu dài.
Có thể tôi chưa hiểu lắm, hiểu sai thì mong Vietnux giải thích thêm. :D
> + Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query check trong => dung luôn hàm time() ấy, substr(time(), 3) => lấy 7 ký tự cuối, thời gian luôn trôi đi ko bao giờ có sự lặp lại cả nên bạn không cần phải kiểm tra đã có hay chưa
> -----Original Message----- > From: phpvietnam@googlegroups.com [mailto:phpvietnam@googlegroups.com] On Behalf Of Hùng Nguy?n > Sent: Tuesday, December 27, 2011 10:32 AM > To: PHPVietnam > Subject: [PHPVietnam] Xin ý kiến mọi người về tạo unique ID trong database
> Chào các bác, > Chả là hiện tại em muốn tạo Unique ID cho sản phẩm trong database, mỗi > UID này có chiều dài 7 ký tự. Em đang phân vân 1 chút trong việc tạo > ra UID này như sau: > + Column dạng char thì tốc độ truy vấn không bằng int > + Dùng auto_increment thì không đảm bảo được chiều dài dữ liệu == 7 ký > tự > + Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query check trong > db xem tồn tại hay chưa => có thể mất nhiều query check trong khi tạo > ra được 1 UID > + Dùng auto_increment thì lại lãng phí ID (với những ID bị xóa đi thì > sẽ không dùng lại được) > Bác nào đã giải quyết vấn đề này thì cho mình xin cao kiến với :)
-- ------------------------------------------------------------------------ *Giã Dương Đức Minh *
Cám ơn mọi người đã giúp đỡ, @VietNux: Mình cũng đã thử theo cách của bạn nhưng vẫn không đáp ứng chính xác (như bạn Đức Minh đã nói). @Giã Dương Đức Minh: Mình cũng đã tính đến cách như bạn đề cập nhưng ở đây mình muốn tận dụng hết các giá trị mà 7 ký tự đó tạo ra (7 ký tự bao gồm cả chữ lẫn số) nên cách của bạn vẫn bị hạn chế 1 chút.
Còn ai có cao kiến nữa không ạ :D --- 0 ============================== 0 ||||||||||||||||||||| Nguyễn Thạc Hùng |||||||||||||||||||||| 0 ==============o0o============= 0
> Tôi thấy vậy vẫn chưa ổn. > Ví dụ ra 123 4567890 và 321 4567890. > Tôi thử làm một phép tính là, nếu lấy 7 ký tự cuối thì cứ 10 000 000 giây > là bị trùng 7 ký tự cuối 1 lần. --> 10 000 000/(60*60*24) = khoảng 115 > ngày. Dù trùng đúng số giây là rất khó, khả năng vẫn còn khá cao nếu dùng > lâu dài.
> Có thể tôi chưa hiểu lắm, hiểu sai thì mong Vietnux giải thích thêm. :D
> On 12/27/2011 10:47 AM, vietnux wrote:
> + Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query check trong => dung luôn hàm time() ấy, substr(time(), 3) => lấy 7 ký tự cuối, thời gian luôn trôi đi ko bao giờ có sự lặp lại cả nên bạn không cần phải kiểm tra đã có hay chưa
> -----Original Message----- > From: phpvietnam@googlegroups.com [mailto:phpvietnam@googlegroups.com <phpvietnam@googlegroups.com>] On Behalf Of Hùng Nguy?n > Sent: Tuesday, December 27, 2011 10:32 AM > To: PHPVietnam > Subject: [PHPVietnam] Xin ý kiến mọi người về tạo unique ID trong database
> Chào các bác, > Chả là hiện tại em muốn tạo Unique ID cho sản phẩm trong database, mỗi > UID này có chiều dài 7 ký tự. Em đang phân vân 1 chút trong việc tạo > ra UID này như sau: > + Column dạng char thì tốc độ truy vấn không bằng int > + Dùng auto_increment thì không đảm bảo được chiều dài dữ liệu == 7 ký > tự > + Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query check trong > db xem tồn tại hay chưa => có thể mất nhiều query check trong khi tạo > ra được 1 UID > + Dùng auto_increment thì lại lãng phí ID (với những ID bị xóa đi thì > sẽ không dùng lại được) > Bác nào đã giải quyết vấn đề này thì cho mình xin cao kiến với :)
> -- > Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google Groups > "PHPVietnam". > Để đăng bài lên nhóm này, hãy gửi email đến phpvietnam@googlegroups.com. > Để hủy đăng ký khỏi nhóm này, hãy gửi email tới > phpvietnam+unsubscribe@googlegroups.com. > Để biết tùy chọn khác, hãy truy cập nhóm này tại > http://groups.google.com/group/phpvietnam?hl=vi.
Bạn dùng auto_increment, start = 1000000 là có 7 ký tự thôi à.
Nói chung là bạn đang tìm giải pháp .. đẹp mà theo mình là không cần thiết ở đây. Việc bạn mất công check duplicate hầu như chả tốn kém gì.
Khi bạn đã đạt primary key, việc tìm kiếm trên 2^64 giá trị chỉ mất có 64 vòng lặp. Chả là gì so với các bài toán khác mà bạn phải đối mặt.
Tóm lại nếu bạn không thích AI vì sợ ... mất ID thì bạn có thể dùng giải pháp randomize (nên lưu trữ binary - MySQL). Nhưng bạn thử nghĩ xem bạn sẽ có thể mất bao nhiêu ID??? Số record xóa đi hầu hết cực nhỏ so với phần còn lại.
End AI start = 1000000 là nice. --------------------------------- Best regards ! Giang Son Dat Ho Chi Minh City, Vietnam Mobile: +84 988114164
> Cám ơn mọi người đã giúp đỡ, > @VietNux: Mình cũng đã thử theo cách của bạn nhưng vẫn không đáp ứng chính > xác (như bạn Đức Minh đã nói). > @Giã Dương Đức Minh: Mình cũng đã tính đến cách như bạn đề cập nhưng ở đây > mình muốn tận dụng hết các giá trị mà 7 ký tự đó tạo ra (7 ký tự bao gồm cả > chữ lẫn số) nên cách của bạn vẫn bị hạn chế 1 chút.
> Còn ai có cao kiến nữa không ạ :D > --- > 0 ============================== 0 > ||||||||||||||||||||| Nguyễn Thạc Hùng |||||||||||||||||||||| > 0 ==============o0o============= 0
> Vào 10:55 Ngày 27 tháng 12 năm 2011, Giã Dương Đức Minh < > giaduongducm...@gmail.com> đã viết:
> Tôi thấy vậy vẫn chưa ổn. >> Ví dụ ra 123 4567890 và 321 4567890. >> Tôi thử làm một phép tính là, nếu lấy 7 ký tự cuối thì cứ 10 000 000 giây >> là bị trùng 7 ký tự cuối 1 lần. --> 10 000 000/(60*60*24) = khoảng 115 >> ngày. Dù trùng đúng số giây là rất khó, khả năng vẫn còn khá cao nếu dùng >> lâu dài.
>> Có thể tôi chưa hiểu lắm, hiểu sai thì mong Vietnux giải thích thêm. :D
>> On 12/27/2011 10:47 AM, vietnux wrote:
>> + Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query check trong => dung luôn hàm time() ấy, substr(time(), 3) => lấy 7 ký tự cuối, thời gian luôn trôi đi ko bao giờ có sự lặp lại cả nên bạn không cần phải kiểm tra đã có hay chưa
>> -----Original Message----- >> From: phpvietnam@googlegroups.com [mailto:phpvietnam@googlegroups.com <phpvietnam@googlegroups.com>] On Behalf Of Hùng Nguy?n >> Sent: Tuesday, December 27, 2011 10:32 AM >> To: PHPVietnam >> Subject: [PHPVietnam] Xin ý kiến mọi người về tạo unique ID trong database
>> Chào các bác, >> Chả là hiện tại em muốn tạo Unique ID cho sản phẩm trong database, mỗi >> UID này có chiều dài 7 ký tự. Em đang phân vân 1 chút trong việc tạo >> ra UID này như sau: >> + Column dạng char thì tốc độ truy vấn không bằng int >> + Dùng auto_increment thì không đảm bảo được chiều dài dữ liệu == 7 ký >> tự >> + Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query check trong >> db xem tồn tại hay chưa => có thể mất nhiều query check trong khi tạo >> ra được 1 UID >> + Dùng auto_increment thì lại lãng phí ID (với những ID bị xóa đi thì >> sẽ không dùng lại được) >> Bác nào đã giải quyết vấn đề này thì cho mình xin cao kiến với :)
>> -- >> Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google Groups >> "PHPVietnam". >> Để đăng bài lên nhóm này, hãy gửi email đến phpvietnam@googlegroups.com. >> Để hủy đăng ký khỏi nhóm này, hãy gửi email tới >> phpvietnam+unsubscribe@googlegroups.com. >> Để biết tùy chọn khác, hãy truy cập nhóm này tại >> http://groups.google.com/group/phpvietnam?hl=vi.
> -- > Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google Groups > "PHPVietnam". > Để đăng bài lên nhóm này, hãy gửi email đến phpvietnam@googlegroups.com. > Để hủy đăng ký khỏi nhóm này, hãy gửi email tới > phpvietnam+unsubscribe@googlegroups.com. > Để biết tùy chọn khác, hãy truy cập nhóm này tại > http://groups.google.com/group/phpvietnam?hl=vi.
Ok, Nếu vậy thì mình sẽ chọn cách dùng AutoIncrement và tự động pad 0 vào đầu số để đảm bảo đủ 7 chars. Cám ơn mọi người :x --- 0 ============================== 0 ||||||||||||||||||||| Nguyễn Thạc Hùng |||||||||||||||||||||| 0 ==============o0o============= 0
> Bạn dùng auto_increment, start = 1000000 là có 7 ký tự thôi à.
> Nói chung là bạn đang tìm giải pháp .. đẹp mà theo mình là không cần thiết > ở đây. Việc bạn mất công check duplicate hầu như chả tốn kém gì.
> Khi bạn đã đạt primary key, việc tìm kiếm trên 2^64 giá trị chỉ mất có 64 > vòng lặp. Chả là gì so với các bài toán khác mà bạn phải đối mặt.
> Tóm lại nếu bạn không thích AI vì sợ ... mất ID thì bạn có thể dùng giải > pháp randomize (nên lưu trữ binary - MySQL). Nhưng bạn thử nghĩ xem bạn sẽ > có thể mất bao nhiêu ID??? Số record xóa đi hầu hết cực nhỏ so với phần còn > lại.
> End AI start = 1000000 là nice. > --------------------------------- > Best regards ! > Giang Son Dat > Ho Chi Minh City, Vietnam > Mobile: +84 988114164
>> Cám ơn mọi người đã giúp đỡ, >> @VietNux: Mình cũng đã thử theo cách của bạn nhưng vẫn không đáp ứng >> chính xác (như bạn Đức Minh đã nói). >> @Giã Dương Đức Minh: Mình cũng đã tính đến cách như bạn đề cập nhưng ở >> đây mình muốn tận dụng hết các giá trị mà 7 ký tự đó tạo ra (7 ký tự bao >> gồm cả chữ lẫn số) nên cách của bạn vẫn bị hạn chế 1 chút.
>> Còn ai có cao kiến nữa không ạ :D >> --- >> 0 ============================== 0 >> ||||||||||||||||||||| Nguyễn Thạc Hùng |||||||||||||||||||||| >> 0 ==============o0o============= 0
>> Vào 10:55 Ngày 27 tháng 12 năm 2011, Giã Dương Đức Minh < >> giaduongducm...@gmail.com> đã viết:
>> Tôi thấy vậy vẫn chưa ổn. >>> Ví dụ ra 123 4567890 và 321 4567890. >>> Tôi thử làm một phép tính là, nếu lấy 7 ký tự cuối thì cứ 10 000 000 >>> giây là bị trùng 7 ký tự cuối 1 lần. --> 10 000 000/(60*60*24) = khoảng 115 >>> ngày. Dù trùng đúng số giây là rất khó, khả năng vẫn còn khá cao nếu dùng >>> lâu dài.
>>> Có thể tôi chưa hiểu lắm, hiểu sai thì mong Vietnux giải thích thêm. :D
>>> On 12/27/2011 10:47 AM, vietnux wrote:
>>> + Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query check trong => dung luôn hàm time() ấy, substr(time(), 3) => lấy 7 ký tự cuối, thời gian luôn trôi đi ko bao giờ có sự lặp lại cả nên bạn không cần phải kiểm tra đã có hay chưa
>>> -----Original Message----- >>> From: phpvietnam@googlegroups.com [mailto:phpvietnam@googlegroups.com <phpvietnam@googlegroups.com>] On Behalf Of Hùng Nguy?n >>> Sent: Tuesday, December 27, 2011 10:32 AM >>> To: PHPVietnam >>> Subject: [PHPVietnam] Xin ý kiến mọi người về tạo unique ID trong database
>>> Chào các bác, >>> Chả là hiện tại em muốn tạo Unique ID cho sản phẩm trong database, mỗi >>> UID này có chiều dài 7 ký tự. Em đang phân vân 1 chút trong việc tạo >>> ra UID này như sau: >>> + Column dạng char thì tốc độ truy vấn không bằng int >>> + Dùng auto_increment thì không đảm bảo được chiều dài dữ liệu == 7 ký >>> tự >>> + Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query check trong >>> db xem tồn tại hay chưa => có thể mất nhiều query check trong khi tạo >>> ra được 1 UID >>> + Dùng auto_increment thì lại lãng phí ID (với những ID bị xóa đi thì >>> sẽ không dùng lại được) >>> Bác nào đã giải quyết vấn đề này thì cho mình xin cao kiến với :)
>>> -- >>> Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google Groups >>> "PHPVietnam". >>> Để đăng bài lên nhóm này, hãy gửi email đến phpvietnam@googlegroups.com. >>> Để hủy đăng ký khỏi nhóm này, hãy gửi email tới >>> phpvietnam+unsubscribe@googlegroups.com. >>> Để biết tùy chọn khác, hãy truy cập nhóm này tại >>> http://groups.google.com/group/phpvietnam?hl=vi.
>> -- >> Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google Groups >> "PHPVietnam". >> Để đăng bài lên nhóm này, hãy gửi email đến phpvietnam@googlegroups.com. >> Để hủy đăng ký khỏi nhóm này, hãy gửi email tới >> phpvietnam+unsubscribe@googlegroups.com. >> Để biết tùy chọn khác, hãy truy cập nhóm này tại >> http://groups.google.com/group/phpvietnam?hl=vi.
> -- > Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google Groups > "PHPVietnam". > Để đăng bài lên nhóm này, hãy gửi email đến phpvietnam@googlegroups.com. > Để hủy đăng ký khỏi nhóm này, hãy gửi email tới > phpvietnam+unsubscribe@googlegroups.com. > Để biết tùy chọn khác, hãy truy cập nhóm này tại > http://groups.google.com/group/phpvietnam?hl=vi.
Tớ đang dùng cách đúng như Đức Minh mô tả, và đã dùng thử cả cách Giang Sơn Đạt gợi ý, thực tế sử dụng (của tớ) thì cách của Đức Minh mềm dẻo và cơ động hơn trong trường hợp dùng ghi ID sản phẩm.
NHoang
On Dec 27, 11:56 am, Nguyễn Thạc Hùng <aotu...@gmail.com> wrote:
> Ok, > Nếu vậy thì mình sẽ chọn cách dùng AutoIncrement và tự động pad 0 vào đầu > số để đảm bảo đủ 7 chars. > Cám ơn mọi người :x > --- > 0 ============================== 0 > ||||||||||||||||||||| Nguyễn Thạc Hùng |||||||||||||||||||||| > 0 ==============o0o============= 0
> Vào 11:44 Ngày 27 tháng 12 năm 2011, Son Dat Giang > <giangson...@gmail.com>đã viết:
> > Bạn dùng auto_increment, start = 1000000 là có 7 ký tự thôi à.
> > Nói chung là bạn đang tìm giải pháp .. đẹp mà theo mình là không cần thiết > > ở đây. Việc bạn mất công check duplicate hầu như chả tốn kém gì.
> > Khi bạn đã đạt primary key, việc tìm kiếm trên 2^64 giá trị chỉ mất có 64 > > vòng lặp. Chả là gì so với các bài toán khác mà bạn phải đối mặt.
> > Tóm lại nếu bạn không thích AI vì sợ ... mất ID thì bạn có thể dùng giải > > pháp randomize (nên lưu trữ binary - MySQL). Nhưng bạn thử nghĩ xem bạn sẽ > > có thể mất bao nhiêu ID??? Số record xóa đi hầu hết cực nhỏ so với phần còn > > lại.
> > End AI start = 1000000 là nice. > > --------------------------------- > > Best regards ! > > Giang Son Dat > > Ho Chi Minh City, Vietnam > > Mobile: +84 988114164
> >> Cám ơn mọi người đã giúp đỡ, > >> @VietNux: Mình cũng đã thử theo cách của bạn nhưng vẫn không đáp ứng > >> chính xác (như bạn Đức Minh đã nói). > >> @Giã Dương Đức Minh: Mình cũng đã tính đến cách như bạn đề cập nhưng ở > >> đây mình muốn tận dụng hết các giá trị mà 7 ký tự đó tạo ra (7 ký tự bao > >> gồm cả chữ lẫn số) nên cách của bạn vẫn bị hạn chế 1 chút.
> >> Còn ai có cao kiến nữa không ạ :D > >> --- > >> 0 ============================== 0 > >> ||||||||||||||||||||| Nguyễn Thạc Hùng |||||||||||||||||||||| > >> 0 ==============o0o============= 0
> >> Vào 10:55 Ngày 27 tháng 12 năm 2011, Giã Dương Đức Minh < > >> giaduongducm...@gmail.com> đã viết:
> >> Tôi thấy vậy vẫn chưa ổn. > >>> Ví dụ ra 123 4567890 và 321 4567890. > >>> Tôi thử làm một phép tính là, nếu lấy 7 ký tự cuối thì cứ 10 000 000 > >>> giây là bị trùng 7 ký tự cuối 1 lần. --> 10 000 000/(60*60*24) = khoảng 115 > >>> ngày. Dù trùng đúng số giây là rất khó, khả năng vẫn còn khá cao nếu dùng > >>> lâu dài.
> >>> Có thể tôi chưa hiểu lắm, hiểu sai thì mong Vietnux giải thích thêm. :D
> >>> On 12/27/2011 10:47 AM, vietnux wrote:
> >>> + Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query check trong => dung luôn hàm time() ấy, substr(time(), 3) => lấy 7 ký tự cuối, thời gian luôn trôi đi ko bao giờ có sự lặp lại cả nên bạn không cần phải kiểm tra đã có hay chưa
> >>> -----Original Message----- > >>> From: phpvietnam@googlegroups.com [mailto:phpvietnam@googlegroups.com <phpvietnam@googlegroups.com>] On Behalf Of Hùng Nguy?n > >>> Sent: Tuesday, December 27, 2011 10:32 AM > >>> To: PHPVietnam > >>> Subject: [PHPVietnam] Xin ý kiến mọi người về tạo unique ID trong database
> >>> Chào các bác, > >>> Chả là hiện tại em muốn tạo Unique ID cho sản phẩm trong database, mỗi > >>> UID này có chiều dài 7 ký tự. Em đang phân vân 1 chút trong việc tạo > >>> ra UID này như sau: > >>> + Column dạng char thì tốc độ truy vấn không bằng int > >>> + Dùng auto_increment thì không đảm bảo được chiều dài dữ liệu == 7 ký > >>> tự > >>> + Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query check trong > >>> db xem tồn tại hay chưa => có thể mất nhiều query check trong khi tạo > >>> ra được 1 UID > >>> + Dùng auto_increment thì lại lãng phí ID (với những ID bị xóa đi thì > >>> sẽ không dùng lại được) > >>> Bác nào đã giải quyết vấn đề này thì cho mình xin cao kiến với :)
> >>> -- > >>> Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google Groups > >>> "PHPVietnam". > >>> Để đăng bài lên nhóm này, hãy gửi email đến phpvietnam@googlegroups.com. > >>> Để hủy đăng ký khỏi nhóm này, hãy gửi email tới > >>> phpvietnam+unsubscribe@googlegroups.com. > >>> Để biết tùy chọn khác, hãy truy cập nhóm này tại > >>>http://groups.google.com/group/phpvietnam?hl=vi.
> >> -- > >> Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google Groups > >> "PHPVietnam". > >> Để đăng bài lên nhóm này, hãy gửi email đến phpvietnam@googlegroups.com. > >> Để hủy đăng ký khỏi nhóm này, hãy gửi email tới > >> phpvietnam+unsubscribe@googlegroups.com. > >> Để biết tùy chọn khác, hãy truy cập nhóm này tại > >>http://groups.google.com/group/phpvietnam?hl=vi.
> > -- > > Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google Groups > > "PHPVietnam". > > Để đăng bài lên nhóm này, hãy gửi email đến phpvietnam@googlegroups.com. > > Để hủy đăng ký khỏi nhóm này, hãy gửi email tới > > phpvietnam+unsubscribe@googlegroups.com. > > Để biết tùy chọn khác, hãy truy cập nhóm này tại > >http://groups.google.com/group/phpvietnam?hl=vi.
Nếu vậy thì mình sẽ chọn cách dùng AutoIncrement và tự động pad 0 vào đầu <-- khi thiết kế DB chỉ cần check vào thuộc tính zezofill là nó tự thêm 0 vào thôi, bạn thử xem
> Tớ đang dùng cách đúng như Đức Minh mô tả, và đã dùng thử cả cách > Giang Sơn Đạt gợi ý, thực tế sử dụng (của tớ) thì cách của Đức Minh > mềm dẻo và cơ động hơn trong trường hợp dùng ghi ID sản phẩm.
> NHoang
> On Dec 27, 11:56 am, Nguyễn Thạc Hùng <aotu...@gmail.com> wrote: > > Ok, > > Nếu vậy thì mình sẽ chọn cách dùng AutoIncrement và tự động pad 0 vào đầu > > số để đảm bảo đủ 7 chars. > > Cám ơn mọi người :x > > --- > > 0 ============================== 0 > > ||||||||||||||||||||| Nguyễn Thạc Hùng |||||||||||||||||||||| > > 0 ==============o0o============= 0
> > Vào 11:44 Ngày 27 tháng 12 năm 2011, Son Dat Giang > > <giangson...@gmail.com>đã viết:
> > > Bạn dùng auto_increment, start = 1000000 là có 7 ký tự thôi à.
> > > Nói chung là bạn đang tìm giải pháp .. đẹp mà theo mình là không cần > thiết > > > ở đây. Việc bạn mất công check duplicate hầu như chả tốn kém gì.
> > > Khi bạn đã đạt primary key, việc tìm kiếm trên 2^64 giá trị chỉ mất có > 64 > > > vòng lặp. Chả là gì so với các bài toán khác mà bạn phải đối mặt.
> > > Tóm lại nếu bạn không thích AI vì sợ ... mất ID thì bạn có thể dùng > giải > > > pháp randomize (nên lưu trữ binary - MySQL). Nhưng bạn thử nghĩ xem > bạn sẽ > > > có thể mất bao nhiêu ID??? Số record xóa đi hầu hết cực nhỏ so với > phần còn > > > lại.
> > > End AI start = 1000000 là nice. > > > --------------------------------- > > > Best regards ! > > > Giang Son Dat > > > Ho Chi Minh City, Vietnam > > > Mobile: +84 988114164
> > >> Cám ơn mọi người đã giúp đỡ, > > >> @VietNux: Mình cũng đã thử theo cách của bạn nhưng vẫn không đáp ứng > > >> chính xác (như bạn Đức Minh đã nói). > > >> @Giã Dương Đức Minh: Mình cũng đã tính đến cách như bạn đề cập nhưng ở > > >> đây mình muốn tận dụng hết các giá trị mà 7 ký tự đó tạo ra (7 ký tự > bao > > >> gồm cả chữ lẫn số) nên cách của bạn vẫn bị hạn chế 1 chút.
> > >> Còn ai có cao kiến nữa không ạ :D > > >> --- > > >> 0 ============================== 0 > > >> ||||||||||||||||||||| Nguyễn Thạc Hùng |||||||||||||||||||||| > > >> 0 ==============o0o============= 0
> > >> Vào 10:55 Ngày 27 tháng 12 năm 2011, Giã Dương Đức Minh < > > >> giaduongducm...@gmail.com> đã viết:
> > >> Tôi thấy vậy vẫn chưa ổn. > > >>> Ví dụ ra 123 4567890 và 321 4567890. > > >>> Tôi thử làm một phép tính là, nếu lấy 7 ký tự cuối thì cứ 10 000 000 > > >>> giây là bị trùng 7 ký tự cuối 1 lần. --> 10 000 000/(60*60*24) = > khoảng 115 > > >>> ngày. Dù trùng đúng số giây là rất khó, khả năng vẫn còn khá cao nếu > dùng > > >>> lâu dài.
> > >>> Có thể tôi chưa hiểu lắm, hiểu sai thì mong Vietnux giải thích thêm. > :D
> > >>> On 12/27/2011 10:47 AM, vietnux wrote:
> > >>> + Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query check > trong => dung luôn hàm time() ấy, substr(time(), 3) => lấy 7 ký tự cuối, > thời gian luôn trôi đi ko bao giờ có sự lặp lại cả nên bạn không cần phải > kiểm tra đã có hay chưa
> > >>> -----Original Message----- > > >>> From: phpvietnam@googlegroups.com [mailto: > phpvietnam@googlegroups.com <phpvietnam@googlegroups.com>] On Behalf Of > Hùng Nguy?n > > >>> Sent: Tuesday, December 27, 2011 10:32 AM > > >>> To: PHPVietnam > > >>> Subject: [PHPVietnam] Xin ý kiến mọi người về tạo unique ID trong > database
> > >>> Chào các bác, > > >>> Chả là hiện tại em muốn tạo Unique ID cho sản phẩm trong database, > mỗi > > >>> UID này có chiều dài 7 ký tự. Em đang phân vân 1 chút trong việc tạo > > >>> ra UID này như sau: > > >>> + Column dạng char thì tốc độ truy vấn không bằng int > > >>> + Dùng auto_increment thì không đảm bảo được chiều dài dữ liệu == 7 > ký > > >>> tự > > >>> + Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query check > trong > > >>> db xem tồn tại hay chưa => có thể mất nhiều query check trong khi tạo > > >>> ra được 1 UID > > >>> + Dùng auto_increment thì lại lãng phí ID (với những ID bị xóa đi thì > > >>> sẽ không dùng lại được) > > >>> Bác nào đã giải quyết vấn đề này thì cho mình xin cao kiến với :)
> > >>> -- > > >>> Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google Groups > > >>> "PHPVietnam". > > >>> Để đăng bài lên nhóm này, hãy gửi email đến > phpvietnam@googlegroups.com. > > >>> Để hủy đăng ký khỏi nhóm này, hãy gửi email tới > > >>> phpvietnam+unsubscribe@googlegroups.com. > > >>> Để biết tùy chọn khác, hãy truy cập nhóm này tại > > >>>http://groups.google.com/group/phpvietnam?hl=vi.
> > >> -- > > >> Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google Groups > > >> "PHPVietnam". > > >> Để đăng bài lên nhóm này, hãy gửi email đến > phpvietnam@googlegroups.com. > > >> Để hủy đăng ký khỏi nhóm này, hãy gửi email tới > > >> phpvietnam+unsubscribe@googlegroups.com. > > >> Để biết tùy chọn khác, hãy truy cập nhóm này tại > > >>http://groups.google.com/group/phpvietnam?hl=vi.
> > > -- > > > Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google Groups > > > "PHPVietnam". > > > Để đăng bài lên nhóm này, hãy gửi email đến > phpvietnam@googlegroups.com. > > > Để hủy đăng ký khỏi nhóm này, hãy gửi email tới > > > phpvietnam+unsubscribe@googlegroups.com. > > > Để biết tùy chọn khác, hãy truy cập nhóm này tại > > >http://groups.google.com/group/phpvietnam?hl=vi.
> -- > Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google Groups > "PHPVietnam". > Để đăng bài lên nhóm này, hãy gửi email đến phpvietnam@googlegroups.com. > Để hủy đăng ký khỏi nhóm này, hãy gửi email tới > phpvietnam+unsubscribe@googlegroups.com. > Để biết tùy chọn khác, hãy truy cập nhóm này tại > http://groups.google.com/group/phpvietnam?hl=vi.
> Nếu vậy thì mình sẽ chọn cách dùng AutoIncrement và tự động pad 0 vào > đầu <-- khi thiết kế DB chỉ cần check vào thuộc tính zezofill là nó tự > thêm 0 vào thôi, bạn thử xem
> Tớ đang dùng cách đúng như Đức Minh mô tả, và đã dùng thử cả cách > Giang Sơn Đạt gợi ý, thực tế sử dụng (của tớ) thì cách của Đức Minh > mềm dẻo và cơ động hơn trong trường hợp dùng ghi ID sản phẩm.
> NHoang
> On Dec 27, 11:56 am, Nguyễn Thạc Hùng <aotu...@gmail.com > <mailto:aotu...@gmail.com>> wrote: > > Ok, > > Nếu vậy thì mình sẽ chọn cách dùng AutoIncrement và tự động pad > 0 vào đầu > > số để đảm bảo đủ 7 chars. > > Cám ơn mọi người :x > > --- > > 0 ============================== 0 > > ||||||||||||||||||||| Nguyễn Thạc Hùng |||||||||||||||||||||| > > 0 ==============o0o============= 0
> > Vào 11:44 Ngày 27 tháng 12 năm 2011, Son Dat Giang > > <giangson...@gmail.com <mailto:giangson...@gmail.com>>đã viết:
> > > Bạn dùng auto_increment, start = 1000000 là có 7 ký tự thôi à.
> > > Nói chung là bạn đang tìm giải pháp .. đẹp mà theo mình là > không cần thiết > > > ở đây. Việc bạn mất công check duplicate hầu như chả tốn kém gì.
> > > Khi bạn đã đạt primary key, việc tìm kiếm trên 2^64 giá trị > chỉ mất có 64 > > > vòng lặp. Chả là gì so với các bài toán khác mà bạn phải đối mặt.
> > > Tóm lại nếu bạn không thích AI vì sợ ... mất ID thì bạn có thể > dùng giải > > > pháp randomize (nên lưu trữ binary - MySQL). Nhưng bạn thử > nghĩ xem bạn sẽ > > > có thể mất bao nhiêu ID??? Số record xóa đi hầu hết cực nhỏ so > với phần còn > > > lại.
> > > End AI start = 1000000 là nice. > > > --------------------------------- > > > Best regards ! > > > Giang Son Dat > > > Ho Chi Minh City, Vietnam > > > Mobile: +84 988114164
> > >> Cám ơn mọi người đã giúp đỡ, > > >> @VietNux: Mình cũng đã thử theo cách của bạn nhưng vẫn không > đáp ứng > > >> chính xác (như bạn Đức Minh đã nói). > > >> @Giã Dương Đức Minh: Mình cũng đã tính đến cách như bạn đề > cập nhưng ở > > >> đây mình muốn tận dụng hết các giá trị mà 7 ký tự đó tạo ra > (7 ký tự bao > > >> gồm cả chữ lẫn số) nên cách của bạn vẫn bị hạn chế 1 chút.
> > >> Còn ai có cao kiến nữa không ạ :D > > >> --- > > >> 0 ============================== 0 > > >> ||||||||||||||||||||| Nguyễn Thạc Hùng |||||||||||||||||||||| > > >> 0 ==============o0o============= 0
> > >> Vào 10:55 Ngày 27 tháng 12 năm 2011, Giã Dương Đức Minh < > > >> giaduongducm...@gmail.com <mailto:giaduongducm...@gmail.com>> > đã viết:
> > >> Tôi thấy vậy vẫn chưa ổn. > > >>> Ví dụ ra 123 4567890 và 321 4567890. > > >>> Tôi thử làm một phép tính là, nếu lấy 7 ký tự cuối thì cứ 10 > 000 000 > > >>> giây là bị trùng 7 ký tự cuối 1 lần. --> 10 000 > 000/(60*60*24) = khoảng 115 > > >>> ngày. Dù trùng đúng số giây là rất khó, khả năng vẫn còn khá > cao nếu dùng > > >>> lâu dài.
> > >>> Có thể tôi chưa hiểu lắm, hiểu sai thì mong Vietnux giải > thích thêm. :D
> > >>> On 12/27/2011 10:47 AM, vietnux wrote:
> > >>> + Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query > check trong => dung luôn hàm time() ấy, substr(time(), 3) => lấy 7 > ký tự cuối, thời gian luôn trôi đi ko bao giờ có sự lặp lại cả nên > bạn không cần phải kiểm tra đã có hay chưa
> > >>> -----Original Message----- > > >>> From: phpvietnam@googlegroups.com > <mailto:phpvietnam@googlegroups.com> > [mailto:phpvietnam@googlegroups.com > <mailto:phpvietnam@googlegroups.com> <phpvietnam@googlegroups.com > <mailto:phpvietnam@googlegroups.com>>] On Behalf Of Hùng Nguy?n > > >>> Sent: Tuesday, December 27, 2011 10:32 AM > > >>> To: PHPVietnam > > >>> Subject: [PHPVietnam] Xin ý kiến mọi người về tạo unique ID > trong database
> > >>> Chào các bác, > > >>> Chả là hiện tại em muốn tạo Unique ID cho sản phẩm trong > database, mỗi > > >>> UID này có chiều dài 7 ký tự. Em đang phân vân 1 chút trong > việc tạo > > >>> ra UID này như sau: > > >>> + Column dạng char thì tốc độ truy vấn không bằng int > > >>> + Dùng auto_increment thì không đảm bảo được chiều dài dữ > liệu == 7 ký > > >>> tự > > >>> + Tạo ra chuỗi 7 ký tự random trong PHP thì lại phải query > check trong > > >>> db xem tồn tại hay chưa => có thể mất nhiều query check > trong khi tạo > > >>> ra được 1 UID > > >>> + Dùng auto_increment thì lại lãng phí ID (với những ID bị > xóa đi thì > > >>> sẽ không dùng lại được) > > >>> Bác nào đã giải quyết vấn đề này thì cho mình xin cao kiến > với :)
> > >>> -- > > >>> Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google > Groups > > >>> "PHPVietnam". > > >>> Để đăng bài lên nhóm này, hãy gửi email đến > phpvietnam@googlegroups.com <mailto:phpvietnam@googlegroups.com>. > > >>> Để hủy đăng ký khỏi nhóm này, hãy gửi email tới > > >>> phpvietnam+unsubscribe@googlegroups.com > <mailto:phpvietnam%2Bunsubscribe@googlegroups.com>. > > >>> Để biết tùy chọn khác, hãy truy cập nhóm này tại > > >>>http://groups.google.com/group/phpvietnam?hl=vi.
> > >> -- > > >> Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google > Groups > > >> "PHPVietnam". > > >> Để đăng bài lên nhóm này, hãy gửi email đến > phpvietnam@googlegroups.com <mailto:phpvietnam@googlegroups.com>. > > >> Để hủy đăng ký khỏi nhóm này, hãy gửi email tới > > >> phpvietnam+unsubscribe@googlegroups.com > <mailto:phpvietnam%2Bunsubscribe@googlegroups.com>. > > >> Để biết tùy chọn khác, hãy truy cập nhóm này tại > > >>http://groups.google.com/group/phpvietnam?hl=vi.
> > > -- > > > Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google > Groups > > > "PHPVietnam". > > > Để đăng bài lên nhóm này, hãy gửi email đến > phpvietnam@googlegroups.com <mailto:phpvietnam@googlegroups.com>. > > > Để hủy đăng ký khỏi nhóm này, hãy gửi email tới > > > phpvietnam+unsubscribe@googlegroups.com > <mailto:phpvietnam%2Bunsubscribe@googlegroups.com>. > > > Để biết tùy chọn khác, hãy truy cập nhóm này tại > > >http://groups.google.com/group/phpvietnam?hl=vi.
> -- > Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google > Groups "PHPVietnam". > Để đăng bài lên nhóm này, hãy gửi email đến > phpvietnam@googlegroups.com <mailto:phpvietnam@googlegroups.com>. > Để hủy đăng ký khỏi nhóm này, hãy gửi email tới > phpvietnam+unsubscribe@googlegroups.com > <mailto:phpvietnam%2Bunsubscribe@googlegroups.com>. > Để biết tùy chọn khác, hãy truy cập nhóm này tại > http://groups.google.com/group/phpvietnam?hl=vi.
> -- > Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google Groups > "PHPVietnam". > Để đăng bài lên nhóm này, hãy gửi email đến phpvietnam@googlegroups.com. > Để hủy đăng ký khỏi nhóm này, hãy gửi email tới > phpvietnam+unsubscribe@googlegroups.com. > Để biết tùy chọn khác, hãy truy cập nhóm này tại