Rumah > Soal Jawab > teks badan
巴扎黑2017-04-18 10:46:56
PILIH
*
DARI
test
DI MANA
1 = 1
DAN NAMA SEPERTI concat(
'%',
(
CASE
WHEN NAME(传进来的name) IS NULL THEN
'#################'(数据库name不可能的值)
ELSE
NAME(传进来的name)
END
),
'%')
Saya menulis penyelesaian masalah untuk nama, anda boleh menyemak yang lain sendiri, ia mungkin bukan penyelesaian terbaik
大家讲道理2017-04-18 10:46:56
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
天蓬老师2017-04-18 10:46:56
Jika tiada parameter input di bahagian hadapan, mengapa kita perlu menanyakan hasil medan ini? Tidakkah ini melanggar logik perniagaan?
天蓬老师2017-04-18 10:46:56
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
.
ringa_lee2017-04-18 10:46:56
Sebaik-baiknya menulisnya dalam lapisan logik perniagaan (yang sepatutnya dilakukan oleh lapisan ini). Jangan mengendalikan perkara seperti ini dalam lapisan pangkalan data.
ringa_lee2017-04-18 10:46:56
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
PHP中文网2017-04-18 10:46:56
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*
怪我咯2017-04-18 10:46:56
Jika nilai lalai pangkalan data adalah null, atau apabila nilai yang diperolehi adalah null, tukarkannya kepada nu. .
天蓬老师2017-04-18 10:46:56
di mana nama='' atau kaedah ='' atau nama seperti'%%' dan kaedah seperti '%%'