Dalam MySQL, konstruk CASE..WHEN membolehkan pengguna menilai berbilang keadaan dan mengembalikan hasil yang sepadan. Walau bagaimanapun, isu biasa timbul apabila menggunakan CASE dengan keadaan carian dan lajur angka.
Pertanyaan dan Isu Asal:
Dalam pertanyaan, pernyataan CASE menilai harga_asas lajur, dengan base_price ditakrifkan sebagai perpuluhan(8,0):
SELECT CASE course_enrollment_settings.base_price WHEN course_enrollment_settings.base_price = 0 THEN 1 ... ELSE 6 END AS 'calc_base_price', course_enrollment_settings.base_price FROM course_enrollment_settings WHERE course_enrollment_settings.base_price = 0;
Hasil pertanyaan ini mengembalikan hasil yang tidak dijangka dengan semua baris yang dipilih, dengan harga_asas ialah 0, kembalikan keadaan 3:
3 0 3 0 3 0 3 0 3 0
Penyelesaian:
Untuk membetulkan isu ini, spesifikasi lajur selepas CASE harus dikeluarkan. Dalam bentuk kedua CASE, nama lajur tidak diperlukan selepas perkataan CASE jika anda menggunakan syarat carian.
SELECT CASE WHEN course_enrollment_settings.base_price = 0 THEN 1 ... ELSE 6 END AS 'calc_base_price', course_enrollment_settings.base_price FROM course_enrollment_settings WHERE course_enrollment_settings.base_price = 0;
Penjelasan:
CASE mempunyai dua yang berbeza borang: borang pertama menentukan nama lajur, manakala borang kedua tidak. Penggunaan borang kedua yang betul semasa menilai keadaan carian membolehkan MySQL menilai keadaan dengan betul dan mengembalikan hasil yang dimaksudkan.
Atas ialah kandungan terperinci Bagaimana Menggunakan CASE WHEN dengan Betul dalam MySQL dengan Lajur Numerik dan Syarat Carian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!