Di MySQL, bagaimana cara menetapkan urutan penyortiran kustom.
Untuk mencoba menjelaskan apa yang ingin saya pertimbangkan tabel ini:
ID Language Text
0 ENU a
0 JPN b
0 DAN c
1 ENU d
1 JPN e
1 DAN f
2 etc...
di sini saya ingin mengembalikan semua baris yang diurutkan berdasarkan Bahasa dan ID naik sehingga Bahasa = ENU yang lebih dulu, kemudian JPN dan terakhir DAN.
Hasilnya harus: a, d, b, e, c, f dll.
Apakah ini mungkin?
GROUP BY
sebelumnya? Misalnya, nilai pertama yang saya inginkan, muncul di akhir?GROUP BY
dalam subquery, dan pesan dalam kueri luarJika mereka adalah satu-satunya tiga nilai, maka Anda dapat menggunakan sebuah
CASE
ungkapan :(Jika mungkin ada nilai-nilai lain, maka Anda mungkin ingin menambahkan beberapa logika ekstra untuk menjaga pemesanan konsisten, misalnya, Anda bisa menambahkan
ELSE 4
untuk ituCASE
ekspresi, dan ketertiban maka denganLanguage
sendirinya sebagai kriteria pemesanan ketiga:)
sumber
Anda memiliki beberapa opsi begitu saja, yang pertama adalah mengubah Bahasa menjadi ENUM (dengan asumsi ini mungkin, dan Anda hanya mengharapkan beberapa variasi)
Jika Anda menentukannya
ENUM('ENU','JPN','DAN')
makaORDER Language ASC
akan memesan dalam urutan yang Anda tentukan.Yang kedua akan melibatkan suatu kasus di suatu tempat, yaitu
Dari segi kinerja, metode ENUM akan memberikan hasil yang lebih cepat, tetapi akan lebih merepotkan jika Anda perlu menambahkan lebih banyak bahasa. Opsi ketiga adalah menambahkan tabel normalisasi untuk Bahasa yang mungkin berlebihan dalam hal ini.
sumber
ENUM('ENU','JPN','DAN')
?END DESC,
seharusnyaEND CASE DESC,
?CASE
perluEND CASE
, itu tergantung pada konteks.CASE
dalam PROCEDURE memerlukanEND CASE
( dev.mysql.com/doc/refman/5.5/en/case.html ) namunCASE
dalam SELECT tidak memerlukanEND CASE
, cukupEND
( dev.mysql.com/doc/refman/5.7/en/… ) - dalam hal ini konteks itu adalah fungsi aliran kontrol.Untuk kerangka kerja Yii2 kami dapat mencapai dengan mengikuti cara
sumber