84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
认证0级讲师
選択
から
どこで
そして concat のような名前(
名前のトラブルシューティングを書きました。他のものはご自身で確認してください。最善の解決策ではない可能性があります
必ずしもSQLでなくても、ビジネスロジックで書くことができます
データベース フレームワークが使用されているかどうかはわかりません。使用されている場合は、通常、対応するソリューションがあります。 たとえば、mybatis では、iftest を使用して like ステートメントを実行する必要があるかどうかを判断できます。
もう 1 つの方法は、IF(expr1,expr2,expr3) や IF ELSE などのデータベース自体の関数を使用することです
フロントエンドに入力パラメータがない場合、なぜこのフィールドの結果をクエリする必要があるのでしょうか?これはビジネスロジックに違反していませんか?
where IFNULL(name, '') like '%xx%' および IFNULL(method, '') like '%xx%'name が null空の文字列に変換すると、%%が一致します。 where IFNULL(name, '') like'%xx%' and IFNULL(method, '') like '%xx%'如果name为null将其转换为empty string那%%就能匹配上了。
where IFNULL(name, '') like '%xx%' および IFNULL(method, '') like '%xx%'
name
空の文字列
%%
where IFNULL(name, '') like'%xx%' and IFNULL(method, '') like '%xx%'
null
empty string
不过我认为最好的做法还是使用SQL的地方增加逻辑判断会比较好一些,改动量应该非常少,只需要几句代码就搞定了。题主可以看看@家常菜 的SQL增加一个where 1=1的条件,那if
SQL
where 1=1
if
ビジネス ロジック層で記述するのが最善です (この層はこの層が行うことになっています)。これは非常に不合理で非効率です。
簡単な方法は、テーブル内のnull値を「」に変換することですwhere ifnull(name,'') like'%%' and ifnull(method,'') like '%%'効率を考えなければこれで十分です
where ifnull(name,'') like'%%' and ifnull(method,'') like '%%'
質問者は、インターフェイス上のクエリ条件を SQL ステートメントの Where 条件に単純に接続したいと考えています。これは確かにプログラム処理にとって非常に便利ですが、セキュリティ上の理由から、これは行わない方がよいでしょう。 SQLインジェクション。
内部アプリケーションの場合、この環境は確かに非常に安全です。パフォーマンスを考慮すると、このパラメーターを使用せずに、対応する where 句をスプライスしないでください。 Java では次のように記述できます:
*以下は仮定です:
nameStrとmethodStrはそれぞれインターフェースから取得したユーザー入力内容です。ユーザーが入力しない場合、結果はnull
xxxxxx は他の where 条件です。実際に他に条件がない場合は、「where」文字列自体を処理する必要があります*
データベースのデフォルト値がnullの場合、または取得した値がnullの場合はnuに変更します。 。
ここで name='' または Method ='' または '%%' のような名前と '%%' のようなメソッド
選択
リーリーから
リーリーどこで
リーリーそして concat のような名前(
リーリー名前のトラブルシューティングを書きました。他のものはご自身で確認してください。最善の解決策ではない可能性があります
必ずしもSQLでなくても、ビジネスロジックで書くことができます
データベース フレームワークが使用されているかどうかはわかりません。使用されている場合は、通常、対応するソリューションがあります。
たとえば、mybatis では、iftest を使用して like ステートメントを実行する必要があるかどうかを判断できます。
もう 1 つの方法は、IF(expr1,expr2,expr3) や IF ELSE などのデータベース自体の関数を使用することです
フロントエンドに入力パラメータがない場合、なぜこのフィールドの結果をクエリする必要があるのでしょうか?これはビジネスロジックに違反していませんか?
where IFNULL(name, '') like '%xx%' および IFNULL(method, '') like '%xx%'
name
が null空の文字列
に変換すると、%%
が一致します。where IFNULL(name, '') like'%xx%' and IFNULL(method, '') like '%xx%'
如果
name
为null
将其转换为empty string
那%%
就能匹配上了。不过我认为最好的做法还是使用
ただし、SQL
的地方增加逻辑判断会比较好一些,改动量应该非常少,只需要几句代码就搞定了。题主可以看看@家常菜 的SQL增加一个where 1=1
的条件,那if
SQL
を使用して論理的な判断を追加するのが最善の方法だと思います。変更の量は非常に少なく、数行のコードのみで完了します。質問者は @家客菜 の SQL を見てwhere 1=1
条件を追加すると、if 条件。 🎜ビジネス ロジック層で記述するのが最善です (この層はこの層が行うことになっています)。これは非常に不合理で非効率です。
簡単な方法は、テーブル内のnull値を「」に変換することです
where ifnull(name,'') like'%%' and ifnull(method,'') like '%%'
効率を考えなければこれで十分です
質問者は、インターフェイス上のクエリ条件を SQL ステートメントの Where 条件に単純に接続したいと考えています。これは確かにプログラム処理にとって非常に便利ですが、セキュリティ上の理由から、これは行わない方がよいでしょう。 SQLインジェクション。
内部アプリケーションの場合、この環境は確かに非常に安全です。パフォーマンスを考慮すると、このパラメーターを使用せずに、対応する where 句をスプライスしないでください。 Java では次のように記述できます:
リーリー*以下は仮定です:
nameStrとmethodStrはそれぞれインターフェースから取得したユーザー入力内容です。ユーザーが入力しない場合、結果はnull
xxxxxx は他の where 条件です。実際に他に条件がない場合は、「where」文字列自体を処理する必要があります*
データベースのデフォルト値がnullの場合、または取得した値がnullの場合はnuに変更します。 。
ここで name='' または Method ='' または '%%' のような名前と '%%' のようなメソッド