10/10/2018, 09:41

Ý tưởng thế này có Khùng ko PHP-MYSQL - auto INDEX ?!

1/
Tình hình là giả sử mình có 10 cái ID 1>13

Bây giờ mình xóa một số ID giả sử là 5-10;
Lúc này autoindex đã là 13 như vậy khi mình insert một row mới thì sẽ lấy ID là 13, thay đổi con số 13 này thế nào (xem quote). Lệnh gì của MYSQL nhỉ ?

2/ Mình ngẫu nhiên xóa 1 số ID : 2,5 ,7 ,9

Mình muốn khi insert 1 ROw mới thì sẽ sử dụng các ID đã xóa. CÓ cách nào để làm việc này mà ít hao tốn tài nguyên không? Mục đích của mình là muốn các ID liên tục, ko có ID nào ko tồn tại hết và vì hay xóa nên ghét ID ngày càng dài ra

Rất mong anh em co ý kiến.



Statements Value
Format dynamic
Collation utf8_general_ci
Rows 2
Row length ø 1,436
Row size ø 5,212 B
Next Autoindex 13
Creation Jun 08, 2009 at 10:59 AM
Last update Jun 14, 2009 at 01:32 PM
snoob viết 11:47 ngày 10/10/2018
1.Phải vầy ko:
ALTER TABLE `id` AUTO_INCREMENT=1
2.Để mình về xem lại rùi post code, nhưng mình thấy vậy ko nên đâu.
fotech_nd viết 11:52 ngày 10/10/2018
Được gửi bởi khucthuydu
1/
Tình hình là giả sử mình có 10 cái ID 1>13

Bây giờ mình xóa một số ID giả sử là 5-10;
Lúc này autoindex đã là 13 như vậy khi mình insert một row mới thì sẽ lấy ID là 13, thay đổi con số 13 này thế nào (xem quote). Lệnh gì của MYSQL nhỉ ?

2/ Mình ngẫu nhiên xóa 1 số ID : 2,5 ,7 ,9

Mình muốn khi insert 1 ROw mới thì sẽ sử dụng các ID đã xóa. CÓ cách nào để làm việc này mà ít hao tốn tài nguyên không? Mục đích của mình là muốn các ID liên tục, ko có ID nào ko tồn tại hết và vì hay xóa nên ghét ID ngày càng dài ra

Rất mong anh em co ý kiến.
Không phải Khùng mà là quá khùng, nếu như ko nghĩ ra việc gì để làm thì tốt nhất là nên đi chơi cho khuây khỏa đầu óc.
TheHeTre viết 11:57 ngày 10/10/2018
Hết việc.

Tuy nhiên giải pháp cho phương án khùng này là:

CÁCH 1:

+ Tạo một bảng {missing}, chứa những ID đã (vừa bị xóa mà chưa được lấp chỗ trống).
+ Tự đánh số ID cho bảng thật.
+ Mỗi lần xóa các ID thì cho vào bảng {missing}
+ Khi thêm mới thì check xem bảng này có thằng nào không thì gán, rồi xóa.
Nếu không có thì ID = max (table thường) + 1.

CÁCH 2:
+ Thêm một trường trong table nữa, khi xóa thì đánh đấu bằng 1.
+ Khi thêm record mới, update vào những thằng có đánh dấu bằng 1 và thay đổi giá trị về 0 (chẳng hạn). Không có thì thêm mới.

Anyway, đang kẹt ở cty vì mưa nên mới khùng theo này
khucthuydu viết 11:51 ngày 10/10/2018
hehe... cám ơn THT đã trả lời, có lẽ ko còn phương án nào tối ưu hơn có ai có cao kiến gì hơn không ?! Web có 100 ID mà toàn xài ID mấy triệu nhìn ko đẹp
khuongCOMPUTER viết 11:50 ngày 10/10/2018
Vậy tạo cái bảng tạm hay lưu data ra đâu đó, mỗi lần xóa lưu data qua xong truncate nguyên cái table rồi add lại. Đảm bảo số đẹp và liên tục
anipicsa16 viết 11:50 ngày 10/10/2018
Được gửi bởi khuongCOMPUTER
Vậy tạo cái bảng tạm hay lưu data ra đâu đó, mỗi lần xóa lưu data qua xong truncate nguyên cái table rồi add lại. Đảm bảo số đẹp và liên tục
Bác này chơi ác quá, gặp trang phim online của em có khoảng 50k row thì die cái server
AnhTuanKB viết 11:46 ngày 10/10/2018
Không khùng, ngày xưa mình cũng nghĩ vậy, tuy nhiên không cần thiết.
Mình từng gặp 1 topic của nước ngoài bàn luận về vấn đề này. Mà họ nói là cứ để mặc vậy đi.
Vô Thin viết 11:47 ngày 10/10/2018
Cái ông KhucThuyDu dường như nhảy vào là code mà không chịu đọc lý thuyết về DB hay sao ấy?! Tại sao đã chọn auto increasement rồi mà còn đòi nó phải liên tiếp là như thế nào? Có nghĩa là ngay từ đầu mình muốn nó tăng, và hiểu được là khi xóa sẽ phải chấp nhận có "nhảy cóc" thì mới chọn kiểu cho nó tự tăng, còn không, nên chọn kiểu khác ngay từ khi thiết kế các table. Không có lý gì đi gọt chân cho vừa với giày cả
Code Block viết 11:47 ngày 10/10/2018
Cái này là sequences mà, việc gì phải vất vả vậy, chỉ cần tạo 1 sequences và goi seq.nextVal() hay hàm đại loại thế là được.
Bài liên quan
0