MySQL: Cara menggunakan CASE dengan klausa ORDER BY
P粉463291248
P粉463291248 2023-11-01 17:44:15
0
1
483

Saya mempunyai prosedur tersimpan yang perlu mengembalikan jadual selepas menapis baris berdasarkan input. Dua daripada input ialahsort_columnsort_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.

  1. SELECT * FROM 表 ORDER BY sort_column sort_dir
  2. 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

  3. 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

P粉463291248
P粉463291248

membalas semua (1)
P粉294954447

Cara terbaik ialah berbilang案例:

ORDER BY (CASE WHEN sort_input = 'col1_asc' THEN col1_name END) ASC, (CASE WHEN sort_input = 'col1_desc' THEN col1_name END) DESC, (CASE WHEN sort_input = 'col2_asc' THEN col2_name END) ASC, (CASE WHEN sort_input = 'col2_desc' THEN col2_name END) DESC,

Ini mungkin kelihatan panjang. Walau bagaimanapun, ingat bahagianCASE是返回单个值的表达式。因此,您不能将ASCDESC作为THEN.

Juga penting ialah isu jenis data. Pengkompil SQL menentukan jenis tunggal ungkapanCASE. Ini boleh menyebabkan masalah yang tidak dijangka apabila lajur daripada jenis yang berbeza.

Penyelesaian paling mudah ialah menggunakan berbilangCASEungkapan.

    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!