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

Apa cara paling efisien untuk menyimpan urutan pengurutan pada sekelompok catatan dalam database?

Bagaimana kalau hanya menggunakan integer kolom yang mendefinisikan urutan? Secara default Anda menetapkan angka * 1000, seperti 1000, 2000, 3000.... dan jika Anda memindahkan 3000 antara 1000 dan 2000, Anda mengubahnya menjadi 1500. Jadi dalam kebanyakan kasus, Anda tidak perlu memperbarui nomor lainnya sama sekali. Saya menggunakan pendekatan ini dan itu bekerja dengan baik. Anda juga dapat menggunakan double tetapi kemudian Anda tidak memiliki kontrol tentang kesalahan presisi dan pembulatan, jadi sebaiknya jangan menggunakannya.

Jadi algoritme akan terlihat seperti :katakan Anda memindahkan B ke posisi setelah A. Pertama lakukan pilih untuk melihat urutan catatan di sebelah A. Jika setidaknya +2 ​​lebih tinggi dari urutan A maka Anda cukup mengatur urutan B agar sesuai di antaranya. Tetapi jika hanya +1 lebih tinggi (tidak ada spasi setelah A), Anda memilih catatan yang berbatasan dengan B untuk melihat berapa banyak ruang di sisi ini, bagi dengan 2 lalu tambahkan nilai ini ke urutan semua catatan antara A dan B. Itu dia!

(Perhatikan bahwa Anda harus menggunakan transaksi/penguncian untuk algoritme apa pun yang berisi lebih dari satu kueri, jadi ini juga berlaku untuk kasus ini. Cara termudah adalah menggunakan transaksi InnoDB.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dalam keadaan apa Anda ingin Rails disetel untuk TIDAK terhubung kembali ke MYSQL?

  2. Bagaimana cara kerja sesuatu OR DIE() di PHP?

  3. Cara Mengamankan MySQL:Bagian Kedua

  4. PyInstaller, file spesifikasi, ImportError:Tidak ada modul bernama 'bla'

  5. Mengapa MySQL mengizinkan grup berdasarkan kueri TANPA fungsi agregat?