Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để cho phép người dùng chèn vào bất kỳ vị trí nào trong danh sách?

Phương pháp đơn giản nhất từ ​​quan điểm mã là sử dụng kiểu danh sách liên kết, trong đó bạn có id phần tử tiếp theo, thay vì giá trị đơn hàng. Điều này ít hữu ích hơn trong các danh sách nhỏ, nhưng khi bạn bắt đầu tăng kích thước danh sách, nó làm cho các cập nhật / di chuyển / xóa sạch hơn nhiều và ngăn việc có thể cập nhật hàng nghìn bộ giá trị để thực hiện 1 thay đổi đơn hàng.

++ Tôi không có sẵn ví dụ mã chính xác, nhưng bạn sẽ thực hiện lệnh gọi cho tất cả danh sách của một người dùng

SELECT Posts.id, Posts.next, Posts.content, User.firstPost FROM db.posts AS Posts 
JOIN db.user as User ON Posts.ownerid = User.id 
WHERE User.id='123' AND Posts.active = 1;

Điều này sẽ nhận được tất cả các bài đăng của một người dùng và sau đó bạn sẽ có một trường chứa id của bài đăng tiếp theo. Để bắt đầu, bạn sẽ cần một khóa để xác định bài đăng đầu tiên (lưu trữ id của bài đăng đầu tiên trong thông tin của người dùng). Sau khi bạn kéo bài đăng đầu tiên, bạn lấy giá trị 'tiếp theo' của nó và sử dụng giá trị đó để xác định bài đăng tiếp theo.

Điều này có vẻ hơi điên rồ đối với một danh sách ngắn, nhưng hãy nghĩ về một người dùng có 1000 bài đăng. Nếu họ cần thêm 1 bài đăng ở vị trí thứ 2. Trong hệ thống đặt hàng số truyền thống, bây giờ bạn cần cập nhật 999 hàng khác bằng bản cập nhật +1. Với giải pháp này, nếu bạn cần chèn một bài đăng ở vị trí thứ hai, bạn chỉ cần truy vấn bài viết đầu tiên để lấy giá trị tiếp theo. Khi bạn đã có nó, bạn thay đổi nó thành giá trị của bài đăng thứ hai mới và đặt giá trị tiếp theo của bài đăng thứ hai là giá trị ban đầu do bài đăng thứ nhất nắm giữ.

[1st Post] --Next---> [2nd Post] --Next---> [3rd Post]

Sau khi Chèn:

[1st Post] -.                          .--> [2nd Post] --Next---> [3rd Post]
            `--Next--> [New 2nd Post]--`



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết nối bằng tương đương trước cho MySQL

  2. LỖI:HHH000299:Không thể hoàn tất cập nhật giản đồ java.lang.NullPointerException

  3. Lỗi chung:1615 Cần chuẩn bị lại báo cáo đã chuẩn bị trước

  4. Cách kiểm tra trạng thái máy chủ trong MySQL Workbench bằng GUI

  5. Bỏ qua chèn trên mục nhập trùng lặp trong mysql