Saya tidak tahu sama ada rangka kerja pangkalan data digunakan. Jika ya, biasanya terdapat penyelesaian yang sepadan. Sebagai contoh, dalam mybatis, anda boleh menggunakan iftest untuk menentukan sama ada pernyataan serupa perlu dilaksanakan.
Kaedah lain ialah menggunakan fungsi pangkalan data itu sendiri, seperti IF (expr1, expr2, expr3) atau IF ELSE
where IFNULL(name, '') like'%xx%' and IFNULL(method, '') like '%xx%' Jika name ialah null dan tukarkannya kepada empty string, maka %% akan sepadan.
Walau bagaimanapun, saya fikir cara terbaik ialah menggunakan SQL untuk menambah pertimbangan logik Jumlah perubahan sepatutnya sangat kecil, dan ia hanya memerlukan beberapa baris kod. Penanya boleh melihat SQL @家菜菜 dan menambah syarat where 1=1 maka ia akan menjadi sangat mudah untuk menambah syarat kepada syarat if.
Sebaik-baiknya menulisnya dalam lapisan logik perniagaan (yang sepatutnya dilakukan oleh lapisan ini). Jangan mengendalikan perkara seperti ini dalam lapisan pangkalan data.
Cara mudahnya ialah menukar nilai nol dalam jadual kepada '' where ifnull(name,'') like'%%' and ifnull(method,'') like '%%' Jika anda tidak menganggap kecekapan, ini tidak mengapa
Penyoal hanya ingin menyambungkan syarat pertanyaan pada antara muka ke dalam keadaan Where bagi pernyataan SQL Ini sememangnya sangat mudah dalam pemprosesan program Walau bagaimanapun, atas sebab keselamatan, sebaiknya jangan lakukan ini kerana terdapat SQL risiko suntikan.
Jika ia adalah aplikasi dalaman, persekitaran sememangnya sangat selamat, memandangkan prestasi, ia masih disyorkan untuk menangani logik kod SQL tanpa parameter ini, jangan mengeja klausa mana yang sepadan. jika ia Java, ia boleh ditulis sebagai:
String whereClause = "where xxxxxx"
+("".equals(nameStr) ? "" : "name like '%"+nameStr+"%'")
+("".equals(methodStr) ? "" : "method like '%"+methodStr+"%'")
*Berikut adalah andaian:
nameStr dan methodStr ialah kandungan input pengguna yang masing-masing diperoleh daripada antara muka Jika pengguna tidak memasukkan, hasilnya akan menjadi rentetan kosong dan bukannya nol
.
xxxxxx adalah syarat lain di mana Jika benar-benar tiada syarat lain, maka anda perlu berurusan dengan rentetan "di mana" itu sendiri*
PILIH
DARI
DI MANA
DAN NAMA SEPERTI concat(
Saya menulis penyelesaian masalah untuk nama, anda boleh menyemak yang lain sendiri, ia mungkin bukan penyelesaian terbaik
Anda boleh menulisnya dalam logik perniagaan, tidak semestinya dalam sql
Saya tidak tahu sama ada rangka kerja pangkalan data digunakan. Jika ya, biasanya terdapat penyelesaian yang sepadan.
Sebagai contoh, dalam mybatis, anda boleh menggunakan iftest untuk menentukan sama ada pernyataan serupa perlu dilaksanakan.
Kaedah lain ialah menggunakan fungsi pangkalan data itu sendiri, seperti IF (expr1, expr2, expr3) atau IF ELSE
Jika tiada parameter input di bahagian hadapan, mengapa kita perlu menanyakan hasil medan ini? Tidakkah ini melanggar logik perniagaan?
where IFNULL(name, '') like'%xx%' and IFNULL(method, '') like '%xx%'
Jika
name
ialahnull
dan tukarkannya kepadaempty string
, maka%%
akan sepadan.Walau bagaimanapun, saya fikir cara terbaik ialah menggunakan
SQL
untuk menambah pertimbangan logik Jumlah perubahan sepatutnya sangat kecil, dan ia hanya memerlukan beberapa baris kod. Penanya boleh melihat SQL @家菜菜 dan menambah syaratwhere 1=1
maka ia akan menjadi sangat mudah untuk menambah syarat kepada syaratif
.Sebaik-baiknya menulisnya dalam lapisan logik perniagaan (yang sepatutnya dilakukan oleh lapisan ini). Jangan mengendalikan perkara seperti ini dalam lapisan pangkalan data.
Cara mudahnya ialah menukar nilai nol dalam jadual kepada ''
where ifnull(name,'') like'%%' and ifnull(method,'') like '%%'
Jika anda tidak menganggap kecekapan, ini tidak mengapa
Penyoal hanya ingin menyambungkan syarat pertanyaan pada antara muka ke dalam keadaan Where bagi pernyataan SQL Ini sememangnya sangat mudah dalam pemprosesan program Walau bagaimanapun, atas sebab keselamatan, sebaiknya jangan lakukan ini kerana terdapat SQL risiko suntikan.
Jika ia adalah aplikasi dalaman, persekitaran sememangnya sangat selamat, memandangkan prestasi, ia masih disyorkan untuk menangani logik kod SQL tanpa parameter ini, jangan mengeja klausa mana yang sepadan. jika ia Java, ia boleh ditulis sebagai:
*Berikut adalah andaian:
nameStr dan methodStr ialah kandungan input pengguna yang masing-masing diperoleh daripada antara muka Jika pengguna tidak memasukkan, hasilnya akan menjadi rentetan kosong dan bukannya nol
xxxxxx adalah syarat lain di mana Jika benar-benar tiada syarat lain, maka anda perlu berurusan dengan rentetan "di mana" itu sendiri*
Jika nilai lalai pangkalan data adalah null, atau apabila nilai yang diperolehi adalah null, tukarkannya kepada nu. .
di mana nama='' atau kaedah ='' atau nama seperti'%%' dan kaedah seperti '%%'