Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Penataan ulang data kolom di mysql

Jika jumlah perubahannya agak kecil, Anda dapat menghasilkan pernyataan UPDATE yang kikuk tetapi lebih efisien jika Anda mengetahui id dari item yang terlibat:

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;

atau (yang saya kurang suka):

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

UPD :

Dengan asumsi bahwa Anda mengetahui id kategori saat ini (atau namanya), posisi lama, dan posisi barunya, Anda dapat menggunakan kueri berikut untuk memindahkan kategori ke bawah daftar (untuk naik, Anda harus mengubah between kondisi dan new_rank perhitungan ke 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 - cara mengelompokkan jam, diimbangi dengan 30 menit

  2. Memesan hasil MySQL dengan urutan IN?

  3. Memasukkan entri ke kolom JSON di postgres

  4. MySQL - bagaimana kode pos pad depan dengan 0?

  5. MYSQL Syntax error - Codeigniter berfungsi untuk menghitung biaya