Rumah  >  Soal Jawab  >  teks badan

MySQL: Cara menggunakan CASE dengan klausa ORDER BY

Saya mempunyai prosedur tersimpan yang perlu mengembalikan jadual selepas menapis baris berdasarkan input. Dua daripada input ialah sort_columnsort_dir。查询必须在 sort_dir 方向(ASC 或 DESC)中 ORDER BY sort_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粉463291248P粉463291248353 hari yang lalu609

membalas semua(1)saya akan balas

  • P粉294954447

    P粉2949544472023-11-02 11:28:32

    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 bahagian CASE 是返回单个值的表达式。因此,您不能将 ASCDESC 作为 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.

    balas
    0
  • Batalbalas