Saya mempunyai prosedur tersimpan yang perlu mengembalikan jadual selepas menapis baris berdasarkan input. Dua daripada input ialahsort_column
和sort_dir
。查询必须在sort_dir
方向(ASC 或 DESC)中 ORDER BYsort_column
.
Saya mencuba pertanyaan berikut tidak berjaya. Pertanyaan di bawah telah dipermudahkan untuk memasukkan hanya istilah yang berkaitan. Penapis lain berfungsi dengan baik tanpa sebarang masalah.
SELECT * FROM 表 ORDER BY sort_column sort_dir
PILIH * DARI URUSAN jadual MENGIKUT KES sort_column apabila 'col1' kemudian col1_name APABILA 'col2' MAKA col2_name TAMAT CASE sort_dir APABILA 'asc' MAKA ASC LAIN DESC TAMAT
Saya menyambungkan 2 input kepada 1 input dalam format _ dan mencuba yang berikut:
SELECT * FROM table ORDER BY CASE sort_input WHEN 'col1_asc' THEN col1_name ASC WHEN 'col1_desc' THEN col1_name DESC WHEN 'col2_asc' THEN col2_name ASC WHEN 'col2_desc' THEN col2_name DESC END
Saya terus mendapat ralat #1064. Ia berbeza dalam setiap kes di atas, tetapi sentiasa menunjuk ke bahagian "KES". Ini adalah ralat dengan pilihan 2 yang dinyatakan di atas
##1064 - Terdapat ralat dalam sintaks SQL anda semak manual untuk versi pelayan MySQL anda untuk 'WHEN 'col1' THEN col1_name END CASE 'asc' BILA 'desc' THEN DESC ELSE pada baris 4 Betulkan sintaks untuk digunakan sekitar '
Masalahnya nampaknya bukan penamaan lajur. Ini ialah arah pengisihan yang tidak berfungsi. Jika saya mencuba setiap pilihan di atas tanpa bahagian "ASC" dan "DESC", tiada masalah.
Adakah saya melakukan sesuatu yang salah di sini? Adakah terdapat cara yang lebih baik selain CASE?
Versi MySQL: 5.6
Cara terbaik ialah berbilang
案例
:Ini mungkin kelihatan panjang. Walau bagaimanapun, ingat bahagian
CASE
是返回单个值的表达式。因此,您不能将ASC
和DESC
作为THEN
.Juga penting ialah isu jenis data. Pengkompil SQL menentukan jenis tunggal ungkapan
CASE
. Ini boleh menyebabkan masalah yang tidak dijangka apabila lajur daripada jenis yang berbeza.Penyelesaian paling mudah ialah menggunakan berbilang
CASE
ungkapan.