认证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 ='' または '%%' のような名前と '%%' のようなメソッド