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

Sắp xếp lại thứ tự dữ liệu cột trong mysql

Nếu số lượng thay đổi khá nhỏ, bạn có thể tạo một câu lệnh UPDATE vụng về nhưng khá hiệu quả nếu bạn biết id của các mục liên quan:

UPDATE categories
JOIN (
    SELECT 2 as categoryID, 3 as new_order
    UNION ALL
    SELECT 3 as categoryID, 4 as new_order
    UNION ALL
    SELECT 4 as categoryID, 2 as new_order) orders
USING (categoryId)
SET `order` = new_order;

hoặc (mà tôi ít thích hơn):

UPDATE categories
SET `order` = ELT (FIND_IN_SET (categoryID, '2,3,4'),
                   3, 4, 2)
WHERE categoryID in (2,3,4);

CẬP NHẬT :

Giả sử rằng bạn biết id hiện tại của danh mục (hoặc tên của nó), vị trí cũ và vị trí mới của nó, bạn có thể sử dụng truy vấn sau để di chuyển một danh mục xuống danh sách (để di chuyển lên, bạn sẽ phải thay đổi between điều kiện và new_rank tính toán đến rank+1 ):

SET @id:=2, @cur_rank:=2, @new_rank:=4;

UPDATE t1
JOIN (
  SELECT categoryID, (rank - 1) as new_rank
  FROM t1
  WHERE rank between @cur_rank + 1 AND @new_rank
  UNION ALL
  SELECT @id as categoryID, @new_rank as new_rank
) as r
USING (categoryID)
SET rank = new_rank;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Nhận Chi phí Truy vấn Cuối cùng Sử dụng TÌNH TRẠNG HIỂN THỊ NHƯ ‘Last_Query_Cost’

  2. Không thể kết nối với Google Cloud SQL bằng SSL + Golang từ Google App Engine

  3. Tìm hiểu về MySQL Lỗi không thể mở lại bảng

  4. Lưu trữ giá trị php vào java

  5. Tải kết xuất được mã hóa UTF-8 vào MySQL