2011-08-16 57 views
6

Tôi đang sử dụng php và mysql. Tôi có một bảng với cột id được đặt để tăng tự động làm khóa chính. Tôi đang cố thêm một cột khác gọi là sort_order. Cột sắp xếp sẽ tự động tăng khi hàng được chèn vào. Sau đó, người dùng sẽ có thể thay đổi giá trị sort_order. Nhưng mysql không cho phép tăng tự động cho nhiều hơn một cột?tăng nhiều tự động trong mysql

Cách tốt nhất để tự động tăng giá trị sort_order là gì?

Bằng yêu cầu phổ biến, một số giải thích thêm.

Trong khu vực quản trị, người dùng sẽ có danh sách các danh mục. Sử dụng javascript người dùng có thể kéo thứ tự họ muốn các danh mục. Kịch bản sau đó đăng danh sách tất cả các id theo thứ tự mới và các giá trị sort_order theo thứ tự cũ.

Sau đó tôi có hàm php cập nhật mysql với giá trị sort_order mới.

Tất cả điều này đã được thực hiện, ngoại trừ tôi đã điền thủ công tất cả các giá trị sắp xếp thứ tự. Tôi muốn nó có thể có giá trị khi người dùng tạo danh mục mới.

Sau đó, tôi có thể sử dụng thứ tự sắp xếp để hiển thị thứ tự danh mục một cách chính xác ở giao diện người dùng.

Tôi đã hoàn tất mọi thứ. Nhưng trong quá trình phát triển, tôi điền vào các giá trị cho sort_order một cách thủ công.

+0

Bạn có thể cho chúng tôi biết thêm một chút về cách bạn định sử dụng cột 'sắp xếp' không? –

+2

Chính xác thì bạn cần cột auto_increment thứ hai để làm gì? Tôi không hiểu lý do đằng sau chuyện này. – pkk

+0

Nếu bạn có thể chi tiết về cách sử dụng, có thể chúng tôi có thể đề xuất một giải pháp thay thế tốt hơn. – ThinkCode

Trả lời

1

Bạn có thể sử dụng một trigger để cập nhật hàng của bạn khi chèn, hoặc chọn một giá trị thích hợp trong mã PHP của bạn tại thời điểm truy vấn được sản xuất.

Tuy nhiên, bạn nên cân nhắc xem bạn có thực sự cần tạo giá trị sắp xếp tự động tăng dần hay không. Trong mã hiển thị của bạn, bạn có thể sắp xếp các mục đã được sắp xếp theo thứ tự rõ ràng và đặt các mục chưa được phân loại còn lại vào vị trí thích hợp (dưới cùng?) Trong danh sách.

7

Bạn có thể để cột sắp xếp bằng NULL theo mặc định. Điều duy nhất bạn cần là một truy vấn thông minh hơn một chút. Ví dụ:

select * 
from something 
order by ifnull(sort, id) 
0

Bạn có thể lưu 0 trong sắp xếp và sau đó sắp xếp theo sort_order + id. Kết quả sẽ giống nhau bởi vì sort_order sẽ chính xác là 0 thay vì id (ít hơn trên id)

1

Có thể thêm dấu thời gian và sắp xếp vào đó, điều này thực sự bổ sung ý nghĩa cho mô hình dữ liệu của bạn. Cột "sort_order" có nghĩa là bạn đang đặt logic trình bày (xem) vào mô hình dữ liệu của mình, đó là một điều xấu.

+0

Tùy thuộc vào cách sử dụng thực tế, nhưng đôi khi một thứ tự sắp xếp thực sự là một phần của mô hình dữ liệu imo. Hãy xem xét một bộ sưu tập. Có, thứ tự sắp xếp có liên quan đến bản trình bày, nhưng nó cũng là một phần của mô hình vì thứ tự trình bày vừa tùy ý vừa quan trọng đối với toàn bộ thư viện. Bạn không thể chỉ cần đi với khóa chính hoặc dấu thời gian, vì các giá trị đó có nghĩa là tĩnh. Trong hoàn cảnh đó, một phím sắp xếp có ý nghĩa hoàn hảo. – pzuraq

Các vấn đề liên quan