Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mengisih Nombor Versi MySQL yang Disimpan sebagai `varbinary(300)`?

Bagaimana untuk Mengisih Nombor Versi MySQL yang Disimpan sebagai `varbinary(300)`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-10 00:18:02233semak imbas

How to Sort MySQL Version Numbers Stored as `varbinary(300)`?

Isih Nombor Versi MySQL

Apabila menyimpan nombor versi sebagai varbinary(300) dalam MySQL, menyusunnya menggunakan susunan lalai mengikut version_number mungkin menghasilkan keputusan yang tidak betul. Untuk menyelesaikan masalah ini, pertimbangkan untuk menggunakan fungsi INET_ATON untuk memudahkan pengisihan.

Pertanyaan yang diubah suai:

SELECT version_number 
FROM table 
ORDER BY INET_ATON(SUBSTRING_INDEX(CONCAT(version_number,'.0.0.0'),'.',4))

Teknik ini bergantung pada fungsi INET_ATON untuk menukar rentetan yang mewakili alamat IP kepada angka perwakilan. Dengan menggabungkan '.0.0.0' kepada version_number, kami memastikan bahawa setiap nombor versi mempunyai sekurang-kurangnya empat komponen, yang kemudiannya kami gunakan SUBSTRING_INDEX untuk diekstrak.

Dengan mengisih berdasarkan perwakilan berangka bagi empat komponen pertama setiap nombor versi, kami mencapai susunan pengisihan yang diingini. Walau bagaimanapun, ambil perhatian bahawa memandangkan pengisihan ini bergantung pada fungsi, ia mungkin dikenakan penalti prestasi berbanding dengan mengisih terus pada lajur dengan indeks.

Penyelesaian lain, yang dicadangkan oleh @spanky, melibatkan pengasingan komponen nombor versi ke dalam lajur individu. Contohnya, buat lajur untuk versi major, minor, patch dan build. Pendekatan ini membolehkan pengisihan yang cekap pada komponen tertentu, tetapi mungkin memerlukan manipulasi data yang lebih kompleks.

Atas ialah kandungan terperinci Bagaimana untuk Mengisih Nombor Versi MySQL yang Disimpan sebagai `varbinary(300)`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn